MVC 4を使用していて、HTMLタグを含む入力を受け入れる必要があるアクションがあります。アクションは信頼できる管理者だけがアクセスできるため、関連するアクションメソッドにValidateInput(false)
属性を追加してHTMLタグを許可しました。IsAjaxRequestを呼び出すときのHttpRequestValidationExceptionを防ぐ方法
これは、最初はうまくいきましたが、その後、私はAjaxリクエストのためのフォーム認証のリダイレクトを防ぐために、Global.asaxファイルするコード追加しました:このコードを追加した後
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)
...
この問題を解決する最良の方法は何ですか?
モデルプロパティで[AllowHtml'](https://msdn.microsoft.com/en-us/library/system.web.mvc.allowhtmlattribute(v = versus118).aspx)を試しましたか? – DavidG
あるいは、独自のメソッドを書いてください。実際には 'X-Requested-With'が' XMLHttpRequest'に設定されているかどうかを確認するだけです。 – DavidG
@DavidG - モデルバインディングの前に例外がスローされるため、AllowHtmlは必ず助けになりません。自分の実装はどのように見えますか?私。これはILSpyのように、 'return request [" X-Requested-With "] ==" XMLHttpRequest "のようなものです。 (request.Headers!= null && request.Headers ["X-Requested-With"] == "XMLHttpRequest") '? – Joe