此问题始于IE9,对于POST
请求,contentType
必须为text/plain
,而application/json
将不起作用。
我添加了moonscript并继续使用contentType: text/plain
。我还将自定义媒体类型添加到api中,如下面的多种表单所示:
并添加text/plain
媒体类型插入WebApiConfig
config.Formatters.JsonFormatter.SupportedMediaTypes.Add(new MediaTypeHeaderValue("text/html"));
config.Formatters.JsonFormatter.SerializerSettings.ReferenceLoopHandling = Newtonsoft.Json.ReferenceLoopHandling.Ignore;
config.Formatters.JsonFormatter.SerializerSettings.Formatting = Newtonsoft.Json.Formatting.Indented;
// allows 'text/plain' as a supported media type
config.Formatters.Add(new TextMediaTypeFormatter());
但是,在IE9中发帖(使用模拟)时,我仍然收到415 Unsupported Media Type
Key Value
Response HTTP/1.1 415 Unsupported Media Type
$.ajax({
type: "POST",
url: hope_forms.viivApiUrl + 'newsletter',
contentType: 'text/plain',
data: JSON.stringify(model),
success: function (data) {
.....
},
error: function (responseText) {
console.log(responseText)
modal.showModal('Something went wrong, please try again.');
}
});
增加:
如果某些事情发生故障,这是完整的WebApiConfig
:
var cors = new EnableCorsAttribute("*", "*", "*");
config.EnableCors(cors);
config.Routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "api/{controller}/{id}",
defaults: new { id = RouteParameter.Optional }
);
// Uncomment the following line of code to enable query support for actions with an IQueryable or IQueryable<T> return type.
// To avoid processing unexpected or malicious queries, use the validation settings on QueryableAttribute to validate incoming queries.
// For more information, visit http://go.microsoft.com/fwlink/?LinkId=279712.
//config.EnableQuerySupport();
config.EnableSystemDiagnosticsTracing();
//config.Formatters.JsonFormatter.SupportedMediaTypes.Add(new MediaTypeHeaderValue("text/html"));
config.Formatters.JsonFormatter.SerializerSettings.ReferenceLoopHandling = Newtonsoft.Json.ReferenceLoopHandling.Ignore;
config.Formatters.JsonFormatter.SerializerSettings.Formatting = Newtonsoft.Json.Formatting.Indented;
// allows 'text/plain' as a supported media type
config.Formatters.Add(new TextMediaTypeFormatter());
我还更改了ajaxTransport xhr
包装器以使用它:
https://github.com/gfdev/javascript-jquery-transport-xdr
注意:
截至今天,09/21,我已将所有POST
次请求切换为GET
,但我仍希望能够将这些类型转换回POST
。
答案 0 :(得分:1)
我认为您已经遇到了根据this MSDN blog
在2014年出现的奇怪XDomainRequest问题注意:截至2014年,XDomainRequest似乎根本不会发送任何Content-Type标头。当这种情况发生变化时,我不清楚。
Here's之前关于该主题的SO问题也实际上引用了该博客。
这也是您正在使用的jQuery扩展的文档的备份。在Readme.md
中XDomainRequest有一些限制:
- 请求中没有Content-Type标头
因此,如果您检查HttpContext.Request.ContentType
我认为它将为空/空,在这种情况下您应该能够分配响应类型&#34; text / plain&# 34;并向它的神灵祈祷。
基本上IE&lt; 10支持XDomainRequest(甚至XDomainRequest本身)是垃圾。它基本上与我的理解和IE 10 implemented CORS support for XHR requests
有关