我在用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相关问答推荐

Razor 页面客户端站点验证不起作用

属性包含破折号的 ServiceStack 请求对象?

如何使多行的 TextBox 控件无法调整大小?

系统日期时间?与 System.DateTime

VS2012 中无法识别的标签前缀或设备过滤器asp

SignalR + Autofac + OWIN:为什么 GlobalHost.ConnectionManager.GetHubContext 不起作用?

是否可以在没有那些 .svn 文件夹的情况下从 subversion 签出文件?

说服遗留应用程序 VB6 开发人员切换到 C#

是否可以使用 Membership API 更改用户名

在 Asp.net 中通过 Button 的 CommandArgument 传递多个参数

IIS 6/ASP.NET Windows 身份验证 list ?

如何在asp.net中判断会话是否过期

尽管安装了 AspNetCoreModule,但在 IIS 中运行 ASP.NET Core 应用程序时出现 0x8007000d 错误 500.19

缩小 ASP.NET 应用程序的 Html 输出

如何在 ASP.Net 网络表单中使用标签?

将查询参数绑定到 ASP.NET Core 中的模型

将当前谷歌 map 保存为图片

使用 Web.Config 转换的高级任务

ASP.NET MVC 5 Web.config:FormsAuthenticationModule或FormsAuthentication

目录与目录信息