谢谢你的期待!
背景
我正在为不同的应用程序和外部消费者使用的公司编写API层.
在消费端,大多数消费者将使用jQuery $.post()通过ajax调用服务;但是,Internet Explorer让我们的生活更具挑战性(当然!).对于IE,我必须使用XDomainRequest对象,因为IE不会运行jQuery $.post(),因为如果我使用IE的XMLHttpRequest(),我会收到一条不可接受的安全消息(当然,再次!):
否则,XMLHttpRequest()工作正常.
我正在使用C#,.NET MVC 4(WebApi)
问题
问题是XDomainRequest不允许你设置Content-Type标头,并且总是默认为text-plain MVC 4 WebApi控制器不接受(当然还是!!).
题
如何拦截对我的控制器的请求,检测文本内容类型的存在并将其更改为text-json内容类型?
提前致谢!
解决方法
好了两天之后,在文档和阅读这个帖子中,我已经能够完成这项工作了.如果我对解决方案的描述很差,请原谅我;这是我第一次回答这些类型的线程之一.由于我花了这么长时间才发现问题,我认为值得挽救一些灵魂不要陷入同样的问题.
>我做的第一件事就是创建一个DelegatingHandler.因此,在我的帮助文件夹中,或者您想要创建一个类并在其中调用它所需的内容.
这是我的:
public class ContentTypeHandler : DelegatingHandler { /** Check that this is an IE browser. */ if ((request.Headers.UserAgent.ToString().IndexOf("MSIE",System.StringComparison.Ordinal) > -1)) { MediaTypeHeaderValue contentTypeValue; if (MediaTypeHeaderValue.TryParse("application/json",out contentTypeValue)) { request.Content.Headers.ContentType = contentTypeValue; request.Content.Headers.ContentType.CharSet = "utf-8"; } } /** Return request to flow. */ return base.SendAsync(request,cancellationToken) .ContinueWith(task => { // work on the response var response = task.Result; return response; }); }
>最后认为您必须在Application_Start()内的Global.asax.cs文件中调用Handler:
GlobalConfiguration.Configuration.MessageHandlers.Add(new ContentTypeHandler());
这就是我所做的一切,并且有效.祝你好运,希望这对某人有所帮助.
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。