Che*_*hev 18 c# asp.net asp.net-mvc asp.net-mvc-4 asp.net-web-api
我刚刚开始使用MVC 4 Web API,我似乎误解了它是如何工作的.
在Web API之前,我有一个像这样的简单MVC操作方法:
public JsonResult User()
{
return Json(new
{
firstName = "Joe",
lastName = "Jacobs",
email = "joe.jacobs@gmail.com"
});
}
Run Code Online (Sandbox Code Playgroud)
那会很好.在新的Web API控制器中,我正在尝试做类似的事情.
public object User()
{
return new
{
firstName = "Joe",
lastName = "Jacobs",
email = "joe.jacobs@gmail.com"
}
}
Run Code Online (Sandbox Code Playgroud)
这会因序列化错误而失败:
'ObjectContent`1'类型无法序列化内容类型'application/xml的响应主体; 字符集= UTF-8' .
内部异常:
类型'<> f__AnonymousType1`3 [System.String,System.String,System.String]'无法序列化.请考虑使用DataContractAttribute属性对其进行标记,并使用DataMemberAttribute属性标记要序列化的所有成员.如果类型是集合,请考虑使用CollectionDataContractAttribute对其进行标记.有关其他受支持的类型,请参阅Microsoft .NET Framework文档.
关于从API控制器返回匿名类型我不明白的是什么?
cuo*_*gle 32
如果你看一下Fiddler(我在这里使用的是Firefox)

默认情况下,来自浏览器的请求将接受 application/xml,而不是application/json
但是,您可以通过添加一个标头来创建来自Fiddler的虚假请求:
Accept: application/json
Run Code Online (Sandbox Code Playgroud)
它会工作
从链接:
XML序列化程序不支持匿名类型或JObject实例.如果将这些功能用于JSON数据,则应从管道中删除XML格式化程序,如本文后面所述.
如何删除XmlFormatter:
var configuration = GlobalConfiguration.Configuration;
configuration.Formatters.Remove(configuration.Formatters.XmlFormatter);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
11080 次 |
| 最近记录: |