RequestValidationMode = "4.5"とrequestValidationMode = "2.0"に違いはありますか? .NET 4.5アプリケーションがあります。ユーザーがhtmlタグを入力できるため、検証したくないコントロールがあります。
<asp:TextBox ID="txtTitle" runat="server" ValidateRequestMode="Disabled" />
私のweb.configには:
<compilation debug="true" strict="false" explicit="true" targetFramework="4.5">...</compilation>
<httpRuntime targetFramework="4.5" requestValidationMode="2.0" />
最初にrequestValidationMode = "4.5"を設定しましたが、機能しませんでしたが、タグに関するエラーが引き続き表示されます-"クライアントから潜在的に危険なRequest.Form値が検出されました..." 。ただし、requestValidationMode = "2.0"に設定すると機能します。PageLoadを押して、そのフィールドの値をエンコードできます。
はい、2つの間に違いがあります。 4.0以上として指定されたrequestValidationModeはすべて4.0の方法を使用し、4.0以下で指定されたrequestValidationModeは2.0の方法を使用します。以下に2つの説明を示します。
4.0(デフォルト)。 HttpRequestオブジェクトは、HTTP要求データにアクセスするたびに要求検証をトリガーすることを示すフラグを内部的に設定します。これにより、リクエスト中にCookieやURLなどのデータにアクセスする前に、リクエストの検証がトリガーされることが保証されます。構成ファイルのpages要素(存在する場合)または個々のページの@ Pageディレクティブの要求検証設定は無視されます。
2.0。要求の検証は、すべてのHTTP要求に対してではなく、ページに対してのみ有効です。さらに、構成ファイルのpages要素(存在する場合)または個々のページの@ Pageディレクティブの要求検証設定を使用して、検証するページ要求を決定します。
注:他のソリューションもあります。asp.net4.5を使用しているため、コントロールレベルごとに検証することをお勧めします。この方法では、web.configのrequestValidationModeプロパティを4.5のままにして変更することができます。それを必要とするコントロールに。 http://msdn.Microsoft.com/en-us/library/system.web.ui.control.validaterequestmode.aspx
Chris_dotnetの答えに同意します。
ただし、小さなサイドノートを追加したいと思います。
Web.configファイルで、requestValidationMode="2.0"
タグを ロケーション タグを使用すると、特定のページにのみこの「免除」を許可して検証をスキップできます。
<location path="YourPage.aspx">
<system.web>
<httpRuntime requestValidationMode="2.0"/>
</system.web>
</location>