我在用ASP.NET WebAPI RC,并托管一个API控制器,对它没有任何幻想.JSON的一切都很好,但我正在使用Accepts头测试请求不同的格式,这就是我遇到的问题.

我使用jQuery发出AJAX请求,并设置请求的"dataType"参数.这将正确设置适当的Accept标头,如下所示.

$.ajax({
    type: method,
    url: url,
    dataType: "xml",
    data: data || null,
    success: function (data) {
        // omitted
    }
});

下面是fiddler请求/响应的保存.正如您所看到的,Accept头显示application/xml,但WebAPI返回了JSON.我还try 手动将Accept头设置为"application/xml"(因此它不包含text/html内容),但没有效果.

我到底错过了什么?(注意:我在数据中有一些机密信息,但没有对其进行其他调整)

GET http://localhost/insp**snip**6716 HTTP/1.1
Host: localhost
Connection: keep-alive
X-Requested-With: XMLHttpRequest
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.1 (KHTML, like Gecko) Chrome/21.0.1180.60 Safari/537.1
Accept: application/xml, text/xml, */*; q=0.01
Referer: http://localhost/inspector/api/test?
Accept-Encoding: gzip,deflate,sdch
Accept-Language: en-US,en;q=0.8
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.3
Cookie: m=34e2:|2c69:t|47ba:t|4e99:t; .INSPECTOR3COOKIE=08BA683091E2A457B1832E9B*snip*F911D9ED97076


HTTP/1.1 200 OK
Cache-Control: no-cache
Pragma: no-cache
Content-Type: application/json; charset=utf-8
Expires: -1
Server: Microsoft-IIS/7.5
X-AspNet-Version: 4.0.30319
Persistent-Auth: true
X-Powered-By: ASP.NET
Date: Fri, 03 Aug 2012 22:27:42 GMT
Content-Length: 1816

{"Id":2416716,"ProjectId":36,"Url":"http://ins *snip, but obviously this is JSON not XML *

我想指出的是,我没有在AppStart或任何东西中调整任何格式化程序,据我所知,默认情况下应该启用JSON和XML格式化程序.

UPDATE:我想出来了--判断下面我自己的答案

推荐答案

我想出来了!

我在AppStart中有这个,因为我想要的是Xml序列化程序,而不是DataContract序列化程序:

GlobalConfiguration.Configuration.Formatters.XmlFormatter.UseXmlSerializer = true;

然而...显然,我的模型有一些地方让XML序列化程序认为它不能序列化它.我猜这是导致WebAPI决定改用JSON格式化程序的原因.

这种看起来无害的设置实际上可能会影响所使用的格式化程序,这完全是不直观的.希望WebAPI的人看到这一点:)

一些工具可以让你理解内容协商过程的输入和输出,这样你就可以调试这样的问题了.

Asp.net相关问答推荐

当前http上下文的http动词

cookie 存储在系统的什么位置?

返回 HttpResponseMessage 时的 WebAPI Gzip

有条件地在 Gridview 中隐藏 CommandField 或 ButtonField

无法加载文件或程序集 'System.Web.Mvc,版本 = 3.0.0.0,Elmah.MVC 问题

如何从 RouteData 获取路由名称?

__doPostBack 未定义

如何更改 .ASPX 自动格式化设置 (Visual Studio)

排序下拉列表? - C#,ASP.NET

如何在 ASP.NET 中仅在调试模式下执行代码

您如何以编程方式填写表格并发布网页?

.Net Standard 2.0 类库是否有通用配置文件?

如何在 C# 应用程序中调用 VBScript 文件?

VS2017 无法加载文件或程序集 Microsoft.VisualStudio.QualityTools.UnitTestFramework.dll 或其依赖项之一

不同域的登录页面

如何获取部署在 Azure 网站上的 ASP.NET 5 应用程序的错误详细信息?

将字典绑定到中继器

人们使用 JScript.Net 的目的是什么?

如何response.write bytearray?

~/ 等价于 javascript