gpt4 book ai didi

c# - 在 .NET MVC 4 (Web API) 中,如何拦截对 Controller 的请求并更改其内容类型?

转载 作者:行者123 更新时间:2023-11-30 14:13:23 25 4
gpt4 key购买 nike

感谢您的关注!

背景

我正在为一家公司编写 API 层,供不同的应用程序和外部消费者使用。

在消费端,大多数消费者会使用 jQuery $.post() 通过 ajax 调用服务;然而,Internet Explorer 使我们的生活更具挑战性(当然!)。对于 IE,我必须使用 XDomainRequest 对象,因为 IE 不会运行 jQuery $.post() 并且因为如果我使用 IE 的 XMLHttpRequest(),我收到一条安全消息,这是 Not Acceptable (再次 - 当然!):

enter image description here

否则,XMLHttpRequest() 工作正常。

我正在使用 C#、.NET MVC 4 (WebApi)

问题

问题是 XDomainRequest 不允许您设置 Content-Type header 并且始终默认为 text-plain 哪个 MVC 4 WebApi Controller 将不接受(而且再一次——当然!!)。

问题

我如何拦截对我的 Controller 的请求,检测是否存在 text-plain 内容类型并将它们动态更改为 text-json 内容类型?

提前致谢!

最佳答案

好吧,经过两天的大量文档和阅读,我已经能够完成这项工作了。因此,如果我对解决方案的描述很差,请原谅我;这是我第一次回答这些类型的线程之一。由于我花了很长时间才找到这个问题,所以我认为值得拯救一些人免于陷入同样的​​问题。

我的帮助来源来自以上链接 byterot .

  1. 我做的第一件事是创建一个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;
    });
    }
  2. 最后认为您必须做的是在 Application_Start() 中的 Global.asax.cs 文件中调用 Handler:

    GlobalConfiguration.Configuration.MessageHandlers.Add(new ContentTypeHandler());

这就是我所做的一切,而且它奏效了。祝你好运,我希望这对某人有所帮助。

关于c# - 在 .NET MVC 4 (Web API) 中,如何拦截对 Controller 的请求并更改其内容类型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14365953/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com