我正在开发一个 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/