Я использую 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
}
});
Здесь вы можете сохранить запрос/ответ скрипта. Как видно, заголовок Accept отвечает application/xml, но WebAPI возвращает JSON. Я также попытался вручную настроить заголовок Accept только на "application/xml" (поэтому он также не содержит текст /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 должны быть включены по умолчанию.
ОБНОВЛЕНИЕ: Я понял это - проверьте мой собственный ответ ниже