【问题标题】:How to get .NET MVC to bind POST parameters when Content-Type is text/plain当 Content-Type 为 text/plain 时如何让 .NET MVC 绑定 POST 参数
【发布时间】:2013-11-21 00:11:52
【问题描述】:

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

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

现在,由于 Content-Type 是 text/plain,这超出了我的控制范围,MVC 框架不会绑定 POST 内容参数。它似乎只在Content-Typeapplication/x-www-form-urlencoded 时绑定它们。

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

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

Content-Typetext/plain时,如何让MVC框架绑定POST参数?


更新

我相信这些参数将通过Request.InputStream 属性提供。我正在寻找一种使用 MVC 框架默认绑定来一般绑定这些参数的方法。我宁愿不必为我项目中的每个模型编写模型绑定器。

【问题讨论】:

  • 我最初的想法是创建一个自定义模型绑定器。但既然你说你甚至不能访问 Request 对象,我不确定这是否是一个选择。
  • @QuetiM.Porta 我在调试模式下搜索了Request 对象,但找不到 POST 内容参数。提琴手正在展示他们进来。也许我没有在Request 对象上寻找正确的位置?它们不在HeadersParams 集合中。
  • 如果你做 Request["yourParamName"] 它是空的?
  • 你检查 HttpContext 对象了吗?
  • @Romias 是 Request["yourParamName"] 为空。

标签: c# asp.net-mvc asp.net-mvc-3 cors


【解决方案1】:

检查是否:

  • 您确实是在发送 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

【讨论】:

    【解决方案2】:

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

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

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

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

    【讨论】:

    • 我已经看过这些链接,它们是用于 Web API 的。我正在寻找一种在常规 MVC 3 中执行此操作的方法。
    猜你喜欢
    • 1970-01-01
    • 2015-03-14
    • 1970-01-01
    • 2012-05-19
    • 2019-05-01
    • 2016-01-23
    • 1970-01-01
    • 2020-11-05
    • 1970-01-01
    相关资源
    最近更新 更多