我正在使用MVC 4并且需要接受包含HTML标记的输入的Actions。动作只能由受信任的管理员访问,因此我通过将ValidateInput(false)
属性添加到相关的Action方法来允许HTML标记。
这最初工作正常,但随后我将代码添加到Global.asax以防止Ajax请求的Forms身份验证重定向:
if (FormsAuthentication.IsEnabled && context.Request.IsAjaxRequest())
{
context.Response.SuppressFormsAuthenticationRedirect = true;
}
添加此代码后,我开始从HttpRequestValidationException
抛出这些操作的IsAjaxRequest
:
System.Web.HttpRequestValidationException (0x80004005): A potentially dangerous Request.Form value was detected from the client (...).
at System.Web.HttpRequest.ValidateString(String value, String collectionKey, RequestValidationSource requestCollection)
at System.Web.HttpRequest.ValidateHttpValueCollection(HttpValueCollection collection, RequestValidationSource requestCollection)
at System.Web.HttpRequest.get_Form()
at System.Web.HttpRequest.get_Item(String key)
at System.Web.Mvc.AjaxRequestExtensions.IsAjaxRequest(HttpRequestBase request)
at MyApp.Application_BeginRequest(Object sender, EventArgs e)
...
解决此问题的最佳方法是什么?
答案 0 :(得分:0)
我想知道SuppressFormsAuthenticationRedirect
是否在web.config中打破了这个选项:
<pages validateRequest="false"
我有完全相同的情况,并在我的密码字段上放[AllowHtml]
解决了问题。
两件事中的任何一件都是真的:
1)SuppressFormsAuthenticationRedirect
确实禁用了validateRequest=false
2)它从来没有起作用。
不确定哪个是真的,但现在可行了。