3

我有一个使用 POST 类型的 XDomainRequest 的 IE8/IE9 CORS 请求进入 ASP .NET MVC 3 Web 应用程序。链接的博客文章表明:

请求的 Content-Type 标头仅支持 text/plain

现在,由于 Content-Typetext/plain不在我的控制范围内,因此 MVC 框架不会绑定POST内容参数。它似乎只在Content-Typeis时绑定它们application/x-www-form-urlencoded

我也无法从Request对象中读取参数。

我需要找到一种方法让 MVC 绑定这些参数。我想过尝试修改Content-Type请求的,Application_BeginRequest但这没有用。

Content-Type当是时,如何让 MVC 框架绑定 POST 参数text/plain


更新

我相信这些参数可以通过Request.InputStream属性获得。我正在寻找一种使用 MVC 框架默认绑定来通用绑定这些参数的方法。我不想为我的项目中的每个模型编写模型绑定器。

4

2 回答 2

4

检查是否:

  • 您确实是在发送 x-www-form-urlencoded。也许您正在发送 JSON?
  • 响应包括 Access-Control-Allow-Origin 标头

我尝试了以下方法并且成功了:

public class MvcApplication : System.Web.HttpApplication
{
    protected void Application_BeginRequest()
    {
        if (String.IsNullOrEmpty(Context.Request.ContentType) && Context.Request.HttpMethod == "POST")
        {
            Context.Request.ContentType = "application/x-www-form-urlencoded";
        }
    }

    protected void Application_EndRequest()
    {
        Context.Response.AddHeader("Access-Control-Allow-Origin", "*");
    }
}

注意:为了更好的模块化,您可能希望将 Application_BeginRequest 实现为 HTTP 模块,并将 CORS(Access-Control-Allow-Origin)实现为 ActionFilter

于 2013-11-11T01:38:33.463 回答
1

在这个主题上没有真正的经验,但在这里你可以看到一些可以帮助你的方法。

检查此 SO 问题和解决方法:

以下是在 ASP.NET WebAPI 中的实现方式:

http://www.asp.net/web-api/overview/security/enabling-cross-origin-requests-in-web-api

于 2013-11-10T22:18:25.987 回答