【问题标题】:How to prevent MVC3 input validation in custom binder?如何防止自定义活页夹中的 MVC3 输入验证?
【发布时间】:2012-08-02 18:20:34
【问题描述】:

编辑:

在这里找到答案:ASP.NET MVC 3 ValidateRequest(false) not working with FormCollection

原来我需要添加 System.Web.Helpers 以便我可以在 Request 对象上使用 Unvalidated() 扩展方法。这为您提供了一个不会在看起来不安全的输入上引发异常的请求。

--

所以这是我的问题发生的背景:

  • 我有一个模型类,其中包含一组子对象
  • 我编写了一个构造函数,它将解析 FORM 输入,以便我可以将模型发布到操作方法
  • 我已经设置了一个活页夹,它从发布的请求中获取 Form 对象并将其传递给我的模型的构造函数

由于某些子对象可以接受可能包含 HTML 的字符串输入,我需要禁用 MVC 的输入验证。我在 action 方法上设置了 [ValidateInput(false)] 属性,但 HttpRequestValidationException 仍然被抛出在我的模型的构造函数中。一时兴起,我什至尝试在模型的活页夹和模型本身上添加[ValidateInput] 属性,但这也没有解决问题。

我在这里不知所措。我该如何处理这些异常,以便我仍然可以从表单中提取信息?或者,在这种情况下禁用 MVC 输入验证的适当方法是什么?

类草图如下:

public class FooController : ControllerBase {
  [HttpPost]
  [ValidateInput(false)]
  public ActionResult FooAction(FooModel model) { //do stuff; }
}

//tried [ValidateInput(false)] here as well, to no avail
public class FooBinder : BinderBase {
  public override object BindModel(...) {
    return new FooModel(controllerContext.HttpContext.Request.Form);
  }
}

//tried [ValidateInput(false)] here, too....again, no success
public class FooModel {
  public FooModel(NameValueCollection formData) {
    //do some initialization stuff

    var keys = formData.AllKeys;  //exception thrown here when inputs contain '<' or '>'

    //do some object construction stuff
  }

  public IEnumerable<FooChid> ChildCollection { get; set; }
}

【问题讨论】:

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


【解决方案1】:

尝试将 [ValidationInput(false)] 放在 Post 方法(引发异常的地方),并另外添加 [AcceptVerbs(HttpVerbs.Post)]。但是,如果这将是一个公共网站,那么您就是在向 XXS 敞开心扉,这是不明智的。

【讨论】:

  • 我已经编辑了我发布的代码,以便更清楚地表明操作方法是一个 POST 处理程序。不过,我想我已经说得很清楚了,我已经尝试过 [ValidateInput(false)] 并且仍然抛出异常。
  • 我明白了。但是您仍在将过滤器标记应用于 FooAction,而引发异常的是 FooModel。
  • 我也尝试过设置模型类的属性——也没有成功。现在更新了问题以反映这一点。此外,我不明白 ValidateInput 属性可能对其他不相关的类有什么意义。当然,该类是在我的活页夹中实例化的,但我不会将任何工作推迟到其构造函数中的框架。我也没有在构造函数中做任何明确查找未/验证输入的事情。那么,这个装饰器在构造函数内部有什么意义呢?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-09-08
  • 1970-01-01
  • 2016-10-29
  • 2018-03-18
  • 2012-03-06
相关资源
最近更新 更多