我想处理 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;
}
}
提前感谢你们给我的任何帮助!
答案 0 :(得分:0)
您可以使用[AllowHtml]
data annotation和您自己的自定义data annotation来修饰模型的属性,而不是捕获和处理HttpRequestValidationException
,其中包含您需要的验证规则。请参阅this answer以获取一个好例子。
您的模型的属性可能如下所示:
[AllowHtml]
[DisallowHtml]
public string SomeProperty{ get; set; }
这看起来有点傻,但到目前为止,这是我遇到过的最干净的解决方案。