2017-12-16 50 views
1

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) 
... 

この問題を解決する最良の方法は何ですか?

+0

モデルプロパティで[AllowHtml'](https://msdn.microsoft.com/en-us/library/system.web.mvc.allowhtmlattribute(v = versus118).aspx)を試しましたか? – DavidG

+0

あるいは、独自のメソッドを書いてください。実際には 'X-Requested-With'が' XMLHttpRequest'に設定されているかどうかを確認するだけです。 – DavidG

+0

@DavidG - モデルバインディングの前に例外がスローされるため、AllowHtmlは必ず助けになりません。自分の実装はどのように見えますか?私。これはILSpyのように、 'return request [" X-Requested-With "] ==" XMLHttpRequest "のようなものです。 (request.Headers!= null && request.Headers ["X-Requested-With"] == "XMLHttpRequest") '? – Joe

答えて

0

SuppressFormsAuthenticationRedirectは、web.configファイルでこのオプションを壊している場合、私は思ったんだけど:

<pages validateRequest="false" 

は、私はまったく同じ状況だったし、私のパスワードフィールドに [AllowHtml]を置くには、問題を修正しました。

二つのどちらかが真である:

1)SuppressFormsAuthenticationRedirectは、それが最初の場所で働いていたことはありません)validateRequest=false

2の効果を無効にしました。

どちらが正しいか分かりませんが、現在は動作しています。

+0

「まったく同じ状況」とはどういう意味ですか?あなたは 'Application_BeginRequest'で' IsAjaxRequest'を呼び出すと言っていますか? – Joe

+0

申し訳ありません私はあなたがこれをやっていた場所についての部分を逃した。しかし、私は最近、Suppressプロパティを追加したばかりで、パスワードに<記号をつけた顧客にこの問題が発生し始めました。私はこの答えを削除することができます。運がまだありませんか? –

関連する問題