2013-08-06 56 views
1

我试图按照this example

这里是我的C#代码:

public class MyModel 
{ 
    int? ID { get; set; } 
} 

public class MyResourceController : ApiController 
{ 
    [HttpPost] 
    public MyModel MyPostAction(MyModel model) 
    { 
     return model; 
    } 
} 

这里是我的JavaScript:

var data = { model: { ID: 1 } }; 
$http.post(
    '/api/MyResource/MyPostAction', 
    JSON.stringify(data), 
    { 
     headers: { 
      'Content-Type': 'application/json' 
     } 
    } 
); 

当我在动作设置断点和model.IDnull而不是1。我如何发布一个复杂的对象?

+0

您可以使用标题中的[FromBody]跳过字符串化。请参阅http://stackoverflow.com/questions/27869763/how-to-post-an-object-to-webapi-using-angularjs/27869884#27869884 –

回答

3

public加入MyModel固定它的财产(facepalm)。

我结束了在客户端上使用此:

var data = { ID: 1 }; 
$http.post('/api/MyResource/MyPostAction', data); 

谢谢大家。

2
$http.post('/api/MyResource/MyPostAction', data); 

删除JSON.stringify并按原样发布数据。

您不需要指定json头部,因为它是post的默认值。

在服务器上:从的WebAPI

删除的Xml如果你只使用JSON

//WebApiConfig.js 
var appXmlType = config.Formatters.XmlFormatter.SupportedMediaTypes.FirstOrDefault(t => t.MediaType == "application/xml"); 
config.Formatters.XmlFormatter.SupportedMediaTypes.Remove(appXmlType); 
+0

这没有奏效。 :/(我拿出头配置对象,我拿出了JSON.stringify) –

+0

哦,我已经使用包管理器来获取Ninject和Newtonsoft的JSON.NET。也许这是干扰不知何故? –

+0

如果提供了数据并且未定义,JSON仅为默认值。否则它是XML。如果您的Web API控制器没有适用于XML的媒体格式化程序,这一点很重要。 –

8

你不需要将数据包装成model属性:

var data = { ID: 1 }; 
$http.post('/api/MyResource/MyPostAction', data); 
+0

这没有奏效。仍为空。 :/ –

+1

我错过了我的财产上的'公共'......这虽然有帮助。谢谢。 –

相关问题