协慌网

登录 贡献 社区

如何让 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());