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