我正在开发一个 MVC5 互联网应用程序,并且有一个关于用户输入具有 HTML 数据的问题。

我知道如果我想在模型中包含 HTML 代码,我可以包含 [AllowHtml] 数据注释,然后清理对象字段。

我的问题是,对于任何没有 [AllowHtml] 数据注释的对象字段,用户在其中输入一些 HTML 代码,是否有可能迎合这个错误而不是让 Error.cshtml 显示错误?

理想情况下,我希望在 Error.cshtml 显示和记录错误之前在 View 中显示验证消息。

这可能吗?如何在 Error.cshtml 显示和记录错误之前处理错误。

提前致谢。

更新

我在 Global.asax 文件中有如下函数:

protected void Application_Error(object sender, EventArgs e)

此函数会捕获我的错误,例如当用户转到不存在的页面时,有问题的 http error 会直接转到 error.cshtml 文件。

如何编辑我的代码以便 Application_Error 函数捕获此错误?

我正在使用 Elmah 进行日志记录并拥有 customErrors mode="On"

最佳答案

编写一个验证器来检查文本框是否不包含 HTML 并不容易。这是因为 HTML 不是由某些字符定义的,而是由它们的组合定义的。包含 < 、 '>' 甚至 <script> 的文本不一定是 HTML。

您应该采用允许值的方法。如果一个文本框应该只包含数字,那么像这样验证它。

通过在 Application_Error 中覆盖 Global.asax,您可以捕获此异常并将用户重定向到更有意义的错误页面

protected void Application_Error()
{
    Exception lastError = Server.GetLastError();
    if (lastError is HttpRequestValidationException)
    {
        //redirect to a static page and show proper error message
    }
}

如果您使用 Elmah,事情就更简单了。 Elmah 旨在与 ASP.Net 错误处理一起使用。

您需要从 HandleErrorAttribute (或 App_Start\FilterConfig )中删除默认的全局 Global.asax ,然后在您的 Web.config 中设置一个错误页面:
<customErrors mode="On" defaultRedirect="~/error/" />

如果您遇到麻烦,请查看这篇文章,它很好地解释了一切
http://www.hanselman.com/blog/ELMAHErrorLoggingModulesAndHandlersForASPNETAndMVCToo.aspx

关于validation - MVC 5 - 从客户端检测到潜在危险的 Request.Form 值,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/27353321/

10-13 09:15