如何使用AddModelError处理HttpRequestValidationException并返回有意义的错误?

时间:2011-12-16 07:05:20

标签: model-view-controller validation exception request modelstate

我想处理 HttpRequestValidationExceptions (例如,当html插入表单字段时),并在提交后将用户返回到页面,并显示有意义的错误以突出显示问题。

例如,在登录页面上,如果用户在用户名字段中键入了一些无效字符,那么我想抓住 HttpRequestValidationException 并使用用户名字段将用户返回到登录页面突出显示。

我可以使用 OnException 方法捕获继承自 HandleErrorAttribute 的类中的错误。

有没有办法从这里(或任何其他方式)获得控制器 * ModelState *来添加错误?

注意:我不想关闭验证或重定向到错误页面。

e.g:

public override void OnException(ExceptionContext filterContext)
{
    if (filterContext.Exception is HttpRequestValidationException)
        {
            ModelStateDictionary ModelState = <...>
            ModelState.AddModelError("Error", "Invalid chars");
            filterContext.HttpContext.Response
            filterContext.ExceptionHandled = true;
            HttpContextBase HttpContext = filterContext.HttpContext;
            HttpContext.Response.Redirect(HttpContext.Request.Path);

            return;
        }
}

提前感谢你们给我的任何帮助!

1 个答案:

答案 0 :(得分:0)

您可以使用[AllowHtml] data annotation和您自己的自定义data annotation来修饰模型的属性,而不是捕获和处理HttpRequestValidationException,其中包含您需要的验证规则。请参阅this answer以获取一个好例子。

您的模型的属性可能如下所示:

[AllowHtml]
[DisallowHtml]
public string SomeProperty{ get; set; }

这看起来有点傻,但到目前为止,这是我遇到过的最干净的解决方案。