调用IsAjaxRequest时如何防止HttpRequestValidationException

时间:2017-12-16 16:37:54

标签: asp.net-mvc

我正在使用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)
...

解决此问题的最佳方法是什么?

1 个答案:

答案 0 :(得分:0)

我想知道SuppressFormsAuthenticationRedirect是否在web.config中打破了这个选项:

<pages validateRequest="false"

我有完全相同的情况,并在我的密码字段上放[AllowHtml]解决了问题。

两件事中的任何一件都是真的:

1)SuppressFormsAuthenticationRedirect确实禁用了validateRequest=false

的效果

2)它从来没有起作用。

不确定哪个是真的,但现在可行了。