Asp.net mvc 在web.config文件中全局验证textbox控件的html标记输入
我想限制将html标记作为输入的用户。Asp.net mvc 在web.config文件中全局验证textbox控件的html标记输入,asp.net-mvc,razor-pages,Asp.net Mvc,Razor Pages,我想限制将html标记作为输入的用户。 那么,如何在Asp.NETMVC项目的web.config文件中全局处理它呢。 我使用了ValidateInput(false),但它完全允许html标记保存在db中。XSS验证默认在MVC中启用。因此,您不必限制HTML的输入(它已经被限制),而是只允许对已标记的某些操作或ViewModel属性输入HTML 在操作上设置[ValidateInput(false)]属性将禁用对整个操作的验证 在ViewModel属性上设置[AllowHtml]属性只允许对
那么,如何在Asp.NETMVC项目的web.config文件中全局处理它呢。
我使用了ValidateInput(false),但它完全允许html标记保存在db中。XSS验证默认在MVC中启用。因此,您不必限制HTML的输入(它已经被限制),而是只允许对已标记的某些操作或ViewModel属性输入HTML 在操作上设置
[ValidateInput(false)]
属性将禁用对整个操作的验证
在ViewModel属性上设置[AllowHtml]
属性只允许对该属性进行HTML输入。这是启用HTML输入的推荐方法
要解决问题,您应该从操作中删除[ValidateInput(false)]
进一步阅读:
还要确保在web.config中配置了正确的requestValidationMode
若要在输入验证失败时提供自定义错误消息,请在Global.asax中注册一个
IEExceptionFilter
,由其检查引发的异常是否为HttpRequestValidationException
public class HttpRequestValidationExceptionFilter : FilterAttribute, IExceptionFilter {
public const int MySpecialStatusCodeIndicatingValidationError = 1337;
public void OnException(ExceptionContext filterContext) {
if (!filterContext.ExceptionHandled && filterContext.Exception is HttpRequestValidationException) {
// redirect to error controller, which shows custom message
filterContext.Result = new HttpStatusCodeResult(MySpecialStatusCodeIndicatingValidationError);
filterContext.ExceptionHandled = true;
}
}
}
有关使用特殊状态代码处理错误的可能机制,请参阅。我们的想法是识别
MySpecialStatusCodeIndicatingValidationError
并重定向到customHttpErrorController
中的正确操作感谢您的信息,但我的目的是在用户在文本框中输入html标记时向用户发送错误消息,我想在一个地方全局处理这个问题,可以是web.config,也可以是Global.asax。请查看我的编辑,了解如何捕获默认请求验证引发的异常并提供自定义消息。感谢提供信息,我还有一个问题,有没有办法清除验证提供程序(我们在global.asax modelvalidateproviders.Providers.Clear();)中给出),并在web.config文件中添加自定义验证提供程序