gpt4 book ai didi

asp.net-mvc - 在 ASP.NET MVC 中自行处理验证失败

转载 作者:行者123 更新时间:2023-12-02 00:23:18 30 4
gpt4 key购买 nike

我们都知道我们在开发过程中多次看到熟悉的 ASP.NET 错误页面。为了让我的网站给人一种一致的感觉,我宁愿用户看不到这些错误,而是自己处理它们。对于大多数情况,我可以捕获异常并返回我自己的错误页面,我们都很高兴。

除了一个区域,请求验证。这对我来说是一个恼人的问题,因为异常是在请求到达 Controller 之前抛出的,所以我能够自己捕获并处理它。

我可以将“[ValidateInput(false)]”添加到我的方法中以强制通过无效请求,但显然这会禁用必要的验证检查。有人建议我结合使用“ModelState.IsValid”来手动调用输入验证,但 IsValid 似乎只是总是返回“false”,这没有帮助。

如何强制标准输入验证发生在我的 Controller 操作中,而不是之前?

最佳答案

请求验证与模型验证不同。请求验证(您可以使用 [ValidateInput(false)] 禁用它)试图保护潜在危险的用户输入不到达您的 Controller /操作方法。这就是为什么在输入到达您的 Controller 之前从请求管道抛出异常的原因。

我认为如果不 fork MVC WebRuntime 源代码并使用您自己的 MVC 库个人分支,您就无法更改此管道行为。你不应该那样做。

但是,您可以通过在 global.asax 中使用 Application_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

关于asp.net-mvc - 在 ASP.NET MVC 中自行处理验证失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9983322/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com