35

Web フォームを使用して作成したアプリケーションを、vb.net を使用して asp.net mvc フレームワークに変換しています。ビューの 1 つに問題があります。フォームを送信すると、「潜在的に危険な Request.Form 値がクライアントから検出されました」という黄色い画面が表示されます。私は RTE として tinymce を使用しています。ビュー自体に設定しました

ValidateRequest="false"

私がこれまで読んだことから、MVCではそれを尊重していないことを私は知っています。というわけでコントローラーアクションにも入れてみました。私はさまざまなセットアップを試しました:

<ValidateInput(False), AcceptVerbs(HttpVerbs.Post)> _

...と...

<AcceptVerbs(HttpVerbs.Post), ValidateInput(False)> _

…こんなのも…

<ValidateInput(False)> _
<AcceptVerbs(HttpVerbs.Post)> _

それが違いを生んだかどうかを確認するためだけに、まだ黄色の死の画面が表示されます. このビューと、投稿に関連するコントローラーの特定のアクションに対してのみ設定したいのです。何か不足していますか?

4

7 に答える 7

136

asp.net 4 では、web.config でも検証モードを構成する必要があります。

<system.web>要素の子として次を設定します 。

<system.Web>
  ...
  <httpRuntime requestValidationMode="2.0"/>     

Asp.Net 4 は、デフォルトで requestValidationMode を4.0に設定します。これにより、HTTP 要求の BeginRequest フェーズの前に要求の検証を実行するようにシステムに指示されます。検証は、システムがリクエストを検証しないように指示するアクション属性に到達する前に発生するため、属性が役に立たなくなります。requestValidationMode="2.0" を設定すると、asp.net 2.0 の要求検証動作に戻り、ValidateInput属性が期待どおりに動作できるようになります。

于 2010-03-27T20:32:13.767 に答える
17

ポストされているコントローラ アクションが、属性を持っているものであると確信していますか?

于 2009-04-30T16:09:18.090 に答える
3

IModelBinderインターフェイスを実装する独自のモデル バインダーを使用している場合、それらのカスタム モデル バインダーは属性に関係なく常にデータを検証することに気付くでしょう。数行のコードを追加して、カスタム モデル バインダーがアクションのValidateInputフィルターを尊重するようにすることができます。

// First check if request validation is required
var shouldPerformRequestValidation = controllerContext.Controller.ValidateRequest && bindingContext.ModelMetadata.RequestValidationEnabled;

// Get value
var valueProviderResult = bindingContext.GetValueFromValueProvider(shouldPerformRequestValidation);
if (valueProviderResult != null)
{
    var theValue = valueProviderResult.AttemptedValue;

    // etc...
}

これは、Martijn Boland によって非常にうまく説明されています

于 2012-01-23T18:36:23.463 に答える
2

HttpContext.Request.Unvalidated.Form["FieldName"] のようなフィールドへのアクセスを試すことができます

于 2016-06-13T12:36:45.127 に答える
1

これらの提案は、[ValidateInput(false)] を FormCollection と組み合わせて使用​​する必要がある場合に発生するバグによって引き起こされる問題を解決しないことに注意してください。

参照: ASP.NET MVC 3 ValidateRequest(false) が FormCollection で機能しない

于 2010-12-08T09:21:43.207 に答える