如何让ASP.NET Web API使用Chrome返回JSON而不是XML?

使用更新的ASP.NET Web API ,在Chrome中,我看到XML - 我如何将其更改为请求JSON,以便我可以在浏览器中查看它? 我相信这只是请求标题的一部分,我是否正确?


我只在我的MVC Web API项目的App_Start / WebApiConfig.cs类中添加以下内容。

config.Formatters.JsonFormatter.SupportedMediaTypes
    .Add(new MediaTypeHeaderValue("text/html") );

这可以确保得到大多数查询JSON,但你可以得到xml当你发送text/xml

如果您需要将应答Content-Type作为application/json请在下面检查Todd的答案。

NameSpace使用System.Net.Http.Headers ;


如果您在WebApiConfig执行此操作,您将默认获取JSON,但如果您将text/xml作为请求传递给Accept标头,它仍然允许您返回XML

public static class WebApiConfig
{
    public static void Register(HttpConfiguration config)
    {
        config.Routes.MapHttpRoute(
            name: "DefaultApi",
            routeTemplate: "api/{controller}/{id}",
            defaults: new { id = RouteParameter.Optional }
        );

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

如果您没有使用MVC项目类型,因此没有开始使用此类,请参阅此答案以了解如何合并它的详细信息。


我最喜欢Felipe Leusin的方法 - 确保浏览器获得JSON,而不会影响实际需要XML的客户端的内容协商。 对我来说唯一缺失的部分是响应头仍包含content-type:text / html。 为什么这是一个问题? 因为我使用JSON Formatter Chrome扩展,它检查内容类型,而我没有得到我习惯的漂亮格式。 我用一个简单的自定义格式化程序来解决这个问题,它接受text / html请求并返回application / json响应:

public class BrowserJsonFormatter : JsonMediaTypeFormatter
{
    public BrowserJsonFormatter() {
        this.SupportedMediaTypes.Add(new MediaTypeHeaderValue("text/html"));
        this.SerializerSettings.Formatting = Formatting.Indented;
    }

    public override void SetDefaultContentHeaders(Type type, HttpContentHeaders headers, MediaTypeHeaderValue mediaType) {
        base.SetDefaultContentHeaders(type, headers, mediaType);
        headers.ContentType = new MediaTypeHeaderValue("application/json");
    }
}

注册如下:

config.Formatters.Add(new BrowserJsonFormatter());
链接地址: http://www.djcxy.com/p/451.html

上一篇: How do I get ASP.NET Web API to return JSON instead of XML using Chrome?

下一篇: Comments in Markdown