Asp.net mvc 4 MVC4-Web Api和JSON?

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

我正在开发MVC4的Web API,对默认格式有点困惑。我希望API数据是JSON格式的。但是,它以XML的形式返回它。根据上的MVC4入门视频,默认情况下应该是JSON。但是,当我创建一个新的Web Api项目并运行该示例时,我得到以下结果:

<ArrayOfstring><string>value1</string><string>value2</string></ArrayOfstring>
value1value2
我一直在兜圈子,试图用JSON来表达这一点,但显然有很多关于这一点的错误信息。例如:

  • 如果我将“application/json”添加到内容类型头中,它应该返回json。这不起作用,但我怀疑我没有正确的头变量名,因为我没有找到要使用的确切名称。我在请求头中尝试了“contentType”和“contentType”,但没有成功。此外,默认情况下我需要JSON,而不是根据标题信息
  • 如果我创建一个JsonFormatter并将其添加到应用程序_Start
    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!太好了,把戏演得很好!没想到这也可能是一个浏览器问题。