2012-10-10 87 views
2

根据该链接,现在我们可以使用Request.Unvalidated访问表单字段的原始值wihout触发请求验证(并看到可怕错误消息甲潜在危险的Request.Form ...)。不幸的是我无法得到它的工作。如何使用Request.Unvalidated与ASP.NET MVC 4?

的Web.config

<httpRuntime targetFramework="4.5" requestValidationMode="4.5" /> 

在视图模型一个简单的领域:

// [AllowHtml] - even I tried this, it still did not work :(
public string Description { get; set; } 

和控制器的动作:

[HttpPost] 
public ActionResult Edit([Bind(Prefix = "Edit")] EditModel model) 
{ 
    string s = Request.Unvalidated.Form["Edit.Description"]; 
} 

我仍然看到错误“有潜在危险的Request.Form ......“,为什么?试过谷歌,但没有ASP.NET MVC的例子。

工具箱:我正在使用ASP.NET MVC 4项目,面向.NET 4.5和VS2012。

感谢,

UPDATE:使用AllowHtml与Description属性固定我的问题,甚至不需要Request.Unvalidated。在@ webdeveloper的回答中,我仍然在评论下面的问题。

回答

8
+0

我的代码有什么问题吗?编辑操作到达之前出现错误。 –

+0

@Tiendq它落在绑定上,'Unvalidated'的想法是你可以访问具有'潜在危险的Request.Form'的字段,但是这里有'Edit([Bind(Prefix =“Edit”)] EditModel model)'binder works没有'未经验证'。 – webdeveloper

+0

谢谢,我用HtmlAllow修复了它。但正如你所说,有没有机会使用模型绑定和Request.Unvalidated? –

1

看起来您需要将请求验证模式设置为2.0,如webdeveloper的第一个链接中所述。试试这个:

<httpRuntime targetFramework="4.5" requestValidationMode="2.0" /> 
+0

这听起来令人伤心,它似乎仍然是有效管理请求验证的最佳解决方案。自从4.0以来,请求验证一直是ASP.NET中的噩梦,因为配置值是全局的,甚至Request.Unvalidated也没有正确解决这个问题。 –

1

我知道这个问题已经得到了解决@webdeveloper。但是,有关requestValidationMode的更多信息。

例如:它可以是2.04.0

<httpRuntime targetFramework="4.5" requestValidationMode="2.0" /> 

<httpRuntime targetFramework="4.5" requestValidationMode="4.0" /> 

这个请求验证只对网页上启用。以下内容为从MSDN

  • 4.0(默认值)的基准。 HttpRequest对象在内部设置一个标志,该标志指示在访问任何HTTP请求数据时应该触发请求验证。这可以保证在请求期间访问诸如cookie和URL之类的数据之前触发请求验证。忽略配置文件中页面元素(如果有)或单个页面中的@ Page指令的请求验证设置。

  • 2.0仅对页面启用请求验证,而不是对所有HTTP请求启用请求验证。此外,配置文件中页面元素(如果有)的请求验证设置或单个页面中的@ Page指令的请求验证设置用于确定要验证哪些页面请求。

您分配给该属性的值不是有效的匹配ASP.NET的特定版本。任何小于4.0的数值(例如3.7,2.9或2.0)都被解释为2.0。任何大于4.0的数字都被解释为4.0。

因此,定义requestValidationMode="4.5"最初将被解释为requestValidationMode="4.0"