Asp.net mvc 在ASP.NET MVC中自行处理验证失败
我们都知道我们在开发过程中多次看到的熟悉的ASP.NET错误页面。为了让我的站点保持一致的感觉,我希望用户不要看到这些错误,而是自己处理它们。对于大多数事情,我可以捕获异常并返回自己的错误页面,我们都很高兴 除一个区域外,请求验证。这对我来说是一个恼人的问题,因为异常是在请求到达控制器之前抛出的,所以我能够自己捕获并处理它 我可以将“[ValidateInput(false)]”添加到我的方法中以强制无效请求通过,但显然这是禁用必要的验证检查。有人建议我结合使用“ModelState.IsValid”来手动调用输入验证,但IsValid似乎总是返回“false”,这没有帮助Asp.net mvc 在ASP.NET MVC中自行处理验证失败,asp.net-mvc,Asp.net Mvc,我们都知道我们在开发过程中多次看到的熟悉的ASP.NET错误页面。为了让我的站点保持一致的感觉,我希望用户不要看到这些错误,而是自己处理它们。对于大多数事情,我可以捕获异常并返回自己的错误页面,我们都很高兴 除一个区域外,请求验证。这对我来说是一个恼人的问题,因为异常是在请求到达控制器之前抛出的,所以我能够自己捕获并处理它 我可以将“[ValidateInput(false)]”添加到我的方法中以强制无效请求通过,但显然这是禁用必要的验证检查。有人建议我结合使用“ModelState.IsVal
如何强制标准输入验证在控制器操作中进行,而不是在之前?请求验证与模型验证不同。请求验证(您可以使用
[ValidateInput(false)]
禁用)尝试保护潜在危险的用户输入不会到达控制器/操作方法。这就是为什么在输入到达控制器之前从请求管道抛出异常
我认为,如果不使用MVC WebRuntime源代码并使用自己的MVC库分支,就无法改变这种管道行为。你不应该那样做
但是,您可能可以使用global.asax中的Application\u error
处理错误并重定向到自定义错误页面
var ex = Server.GetLastError();
if (ex == null) return;
if (ex.GetType() == typeof(HttpException) && ex.Message.StartsWith(
"A potentially dangerous Request.Path value was detected from the client"))
// redirect to your custom error page here
创建单个基本控制器。将[ValidateInput(false)]添加到控制器类:
[ValidateInput(false)]
public class BaseController : Controller
{
}
然后更新每个控制器以从中继承:
public class HomeController : BaseController
{
}
我不建议自己关闭请求验证,但如果必须关闭,您可以。如果要关闭所有控制器和所有操作方法的请求验证,为什么不在应用程序启动期间将其添加为全局筛选器
publicstaticvoidregisterglobalfilters(GlobalFilterCollection过滤器){filters.Add(newvalidateInputAttribute(false));}
您可能不希望每个控制器都使用它。您还可以在web.config中关闭请求验证。