asp.net-mvc – 使用CORS和IE9(XDomainRequest对象)的ASP Web AP
我一直在疯狂,试图让
jquery.ajax与ie9一起工作.所以我有一个实现CORS的ASP Web API 2 Rest API.所有浏览器的CORS请求都有效. IE9没有用,因为它使用XDomainRequest.我设法通过为IE9自定义实现ajaxTransport来实现它.
现在GET请求似乎工作正常.但是,当我从IE9发出一个帖子请求时,我收到一个HTTP错误415 – 未报告的媒体类型. 我已经将内容类型设置为:“application / json”,我也尝试过“application / x-www-form-urlencoded”,但是根据我的理解XDomainRequest并不支持自定义标题的所有内容?有人知道是否需要在WebAPI上设置特定内容,还是需要调整请求? 我的请求看起来像这样: $.ajax({ url: hostname + "/api/DDC/Book",type: "POST",contentType: "application/json",data: { DealID: function () { return viewModel.get("DealID"); },LocationID: function () { return viewModel.get("LocationID"); },Time: function () { return viewModel.get("selectedDateTime.Time"); } } }) 在服务器上我有这个: [HttpPost("DDC/Book")] [EnableCors(origins: "*",headers: "*",methods: "POST,GET,OPTIONS,PUT,DELETE")] public dynamic Post(BookModel model) { ......... 当我在IE调试器中分析失败的请求时,这是发送出去的请求标头: Key Value Request POST //api/DDC/Book HTTP/1.1 Accept */* Origin http://myurl.com Accept-Language hr-HR Accept-Encoding gzip,deflate User-Agent Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; WOW64; Trident/5.0) Host www.somehost.com Content-Length 55 DNT 1 Connection Keep-Alive Cache-Control no-cache 我真的失去了所有的希望,IE让我发疯了(该死的是你的微软:D),所以任何帮助或建议都非常适合. 编辑:从更多的研究,我发现WebAPI要求内容类型工作,XDomainRequest不发送一个.因此,我看到的唯一解决方案是调整我的webapi,以便在没有设置时使用默认内容类型.虽然不知道如何做到这一点 EDIT2:通过将我的所有POST转换为GET来暂时破解我的方式,不知道这有多聪明,但我现在看到它没有更大的问题,所以它会一直存在直到我解决问题 解决方法
管理自己解决它.正如Ray Nicholus指出的那样,没有Content-Type ASP Web API默认为“application / octet-stream”Content-Type.我需要默认的“application / x-www-form-urlencoded”.
我设法通过编写自己的简单消息处理程序来检查传入的请求“Content-Type”,如果没有任何内容,则添加“application / x-www-form-urlencoded”. 这是代码: public class DefaultContentTypeMessageHandler : DelegatingHandler { protected async override Task<HttpResponseMessage> SendAsync( HttpRequestMessage request,CancellationToken cancellationToken) { if (request.Content.Headers.ContentType == null) request.Content.Headers.ContentType = new System.Net.Http.Headers.MediaTypeHeaderValue("application/x-www-form-urlencoded"); var response = await base.SendAsync(request,cancellationToken); return response; } } 更新: 正如罗伯特·基督在下面的评论中所写,我正在为那些之前没有使用过消息处理程序的人扩展答案:
编写消息处理程序后,需要使用WebAPI进行注册.您可以在WebApiConfig类中执行此操作: public static class WebApiConfig { public static void Register(HttpConfiguration config) { config.MessageHandlers.Add(new DefaultContentTypeMessageHandler()); // Rest of your code } } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- 在ASP.NET Core中相关的ConfigureAwait(false)?
- asp.net-mvc-3 – 如何在ASP MVC3中创建可重用的导航菜单?
- asp.net-core – 基本bproject create无法创建优质Nuget缓存
- asp.net-mvc – 如何将数据从AuthorizeAttribute传递给Cont
- 在ASP.NET MVC中使用HttpContext.Current.Session测试类
- 在asp.net中使用Eval()是什么
- asp.net-mvc-3 – 如何在带有剃刀的asp.net mvc3中使用Kend
- asp.net-mvc – 在MVC文件上传中Request.files为空
- 为什么ASP.Net服务器控件声明需要runat =“server”属性?
- asp.net-mvc – .NET MVC MultiSelectList和选定的值