c# – 在.NET MVC 4(Web API)中,如何拦截控制器请求并更改其内容
谢谢你的期待!
背景 我正在为不同的应用程序和外部消费者使用的公司编写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内容类型? 提前致谢! 解决方法
好了两天之后,在文档和阅读这个帖子中,我已经能够完成这项工作了.如果我对解决方案的描述很差,请原谅我;这是我第一次回答这些类型的线程之一.由于我花了这么长时间才发现问题,我认为值得挽救一些灵魂不要陷入同样的??问题.
我的帮助来源是byterot以上的链接. >我做的第一件事就是创建一个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()); 这就是我所做的一切,并且有效.祝你好运,希望这对某人有所帮助. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |