使用较新的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);
}
}
我最喜欢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());