Asp.net mvc 4 MVC4-Web Api和JSON?
我正在开发MVC4的Web API,对默认格式有点困惑。我希望API数据是JSON格式的。但是,它以XML的形式返回它。根据上的MVC4入门视频,默认情况下应该是JSON。但是,当我创建一个新的Web Api项目并运行该示例时,我得到以下结果:Asp.net mvc 4 MVC4-Web Api和JSON?,asp.net-mvc-4,asp.net-web-api,Asp.net Mvc 4,Asp.net Web Api,我正在开发MVC4的Web API,对默认格式有点困惑。我希望API数据是JSON格式的。但是,它以XML的形式返回它。根据上的MVC4入门视频,默认情况下应该是JSON。但是,当我创建一个新的Web Api项目并运行该示例时,我得到以下结果: <ArrayOfstring><string>value1</string><string>value2</string></ArrayOfstring> value1value2
<ArrayOfstring><string>value1</string><string>value2</string></ArrayOfstring>
value1value2
我一直在兜圈子,试图用JSON来表达这一点,但显然有很多关于这一点的错误信息。例如:
GlobalConfiguration.Configuration.Formatters.Insert(0,新JsonNetFormatter(serializerSettings))代码>它应该可以做到这一点。但我收集到的数据被低估了,因为这些例子都不起作用
默认情况下,我可以做些什么(最好是简单的事情)以JSON格式输出数据?将此添加到GLOBAL.ASAX以获得响应为application/JSON
GlobalConfiguration.Configuration.Formatters.XmlFormatter.SupportedMediaTypes.Clear();
所以在上下文中应该是这样的:
protected void Application_Start()
{
AreaRegistration.RegisterAllAreas();
RegisterGlobalFilters(GlobalFilters.Filters);
RegisterRoutes(RouteTable.Routes);
BundleTable.Bundles.RegisterTemplateBundles();
GlobalConfiguration.Configuration.Formatters.XmlFormatter.SupportedMediaTypes.Clear();
}
或如果需要将XML保留为媒体类型,则可以编辑App_Start/WebApiConfig.cs:
config.Formatters.JsonFormatter.SupportedMediaTypes.Add(new MediaTypeHeaderValue("text/html") );
这使得JSON成为web浏览器的默认响应,但返回text/html
我希望API数据是JSON格式的。但是,它以XML的形式返回它
您如何访问您的webapi?您是否使用Chrome访问您的webapi服务(正如Nick在评论中提到的)?Chrome将Accept header application/xml添加到请求中
如果我将“application/json”添加到内容类型头中,它应该返回json
请尝试设置“接受”标题
如果我创建一个JsonFormatter并将其添加到应用程序_startglobalConfiguration.Configuration.Formatters.Insert(0,新JsonNetFormatter(serializerSettings));它应该会起作用。但我收集到的数据被低估了,因为这些例子都不起作用
如果请求的accept标头是application/xml,则内容协商仍将选择XmlMediaTypeFormatter并返回application/xml。还有一件事,JSON的格式化程序称为JsonMediaTypeFormatter,它已经位于Formatters集合的位置0。如果只需要JSON,请清除Formatters集合的所有默认值,然后只添加JSON一个。无需删除xml支持即可获得JSON响应。对于GET请求,应该设置Accept标头,而不是Content Type标头。对于其他HTTP谓词,这取决于。这里有充分的解释 奖金: 使用GoogleChrome的Postman插件测试RESTAPI。强烈建议:)
您也可以在GLOBAL.ASAX中写以下内容
config.Formatters.JsonFormatter.SupportedMediaTypes.Add(new MediaTypeHeaderValue("application/json"));
这也适用于我。引用费利佩·鲁辛()
我只是在我的MVC Web API项目中添加了以下App_Start/WebApiConfig.cs类
config.Formatters.JsonFormatter.SupportedMediaTypes.Add(new MediaTypeHeaderValue("text/html") );
这确保了在大多数查询中都可以得到json,但在发送text/xml时也可以得到xml
如果您需要将响应内容类型设置为application/json,请检查下面Todd的回答:不要被浏览器愚弄。Chrome和FF将JSON数据呈现为XML。在Fiddler中仔细检查来自应用程序的输出。要查找的标题的正确拼写为“Accept”。内容类型是描述正在发送的内容,而不是您希望发送的内容。默认情况下,JSON格式化程序已经在格式化程序集合中。哇,我从来没有意识到这可能是浏览器的问题。我在用FireFox,doh!太好了,把戏演得很好!没想到这也可能是一个浏览器问题。