ASP.NET Web API返回XML而不是JSON

29

我读到默认情况下,Web API会返回JSON数据,但在创建API时,它返回XML而不是JSON。

public class CurrencyController : ApiController
{
    private CompanyDatabaseContext db = new CompanyDatabaseContext();

    // GET api/Currency
    public IEnumerable<Currency> GetCurrencies()
    {
        return db.Currencies.AsEnumerable();
    }
}

我没有修改任何与平常不同的内容,所以我很困惑。


算了,我发现它实际上返回的是 JSON 数据,不知道为什么 Chrome 把它格式化成 XML 了。 - clifford.duke
可能存在重复:链接 - Fernando Vezzali
2个回答

65

如果您按照以下方式修改您的WebApiConfig,则默认情况下将获得JSON。

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);
    }
}

1
这里的解释是什么?最后两行是在移除XML格式化程序吗? - FistOfFury
1
如果您想删除XML支持(即使明确请求),并希望在所有响应中都这样做,那么很遗憾,似乎找不到如何仅对一个端点强制执行它的信息 :/ - NiKiZe
正是我所需要的!! - Venugopal M

18

Web Api 会查找即将到来的请求头以选择返回的数据类型。例如,如果您设置了 Accept:application/json,它将自动将返回类型设置为 JSON。

此外,设置内容类型为 Web API 提供了有关即将到来的请求数据类型的线索。因此,如果您想将 JSON 数据发布到 Web API,则应在头部中添加 Content-Type:application/json


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接