我有一个IE8/IE9 CORS request using XDomainRequest类型的POST进入ASP .NET MVC 3 Web应用程序。链接的博客帖子表明:
请求的Content-Type标头仅支持text / plain
现在,由于Content-Type是text/plain
并且这超出了我的控制范围,因此MVC框架不会绑定POST
内容参数。当Content-Type
为application/x-www-form-urlencoded
时,它似乎只会绑定它们。
我无法从Request
对象中读取参数。
我需要找到一种方法让MVC绑定这些参数。我考虑过尝试修改Content-Type
上请求的Application_BeginRequest
,但这不起作用。
当Content-Type
为text/plain
时,如何让MVC框架绑定POST参数?
更新
我相信参数将通过Request.InputStream属性提供。我正在寻找一种使用MVC框架默认绑定来一般绑定这些参数的方法。我不想为我的项目中的每个模型编写模型绑定器。
答案 0 :(得分:4)
检查是否:
我尝试了以下内容并且有效:
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
答案 1 :(得分:1)
在这个主题上没有真正的经验,但在这里你可以看到一些可以帮助你的方法。
检查此SO问题和解决方法:
以下是在ASP.NET WebAPI中完成的方法:
http://www.asp.net/web-api/overview/security/enabling-cross-origin-requests-in-web-api