web-dev-qa-db-ja.com

ValidateRequest = "false"はAsp.Net 4で機能しません

Ckeditorを使用するフォームがあります。このフォームは、Asp.Net 2.0および3.5では正常に機能していましたが、Asp.Net 4+では機能しなくなりました。 ValidateRequest = "false"ディレクティブがあります。助言がありますか?

154
HasanG

エラーページで解決策が見つかりました。 requestValidationMode = "2.0"を追加する必要がありました

<system.web>
    <compilation debug="true" targetFramework="4.0" />
    <httpRuntime requestValidationMode="2.0" />
</system.web>

MSDN情報: HttpRuntimeSection.RequestValidationModeプロパティ

192
HasanG

1ページの検証を2.0に戻す方法があります。以下のコードをweb.configに追加するだけです:

<configuration>
    <location path="XX/YY">
        <system.web>
            <httpRuntime requestValidationMode="2.0" />
        </system.web>
    </location>

    ...
    the rest of your configuration
    ...

</configuration>
99
Ben Hoffman

これは古い質問ですが、MVC 3でこの問題が発生した場合は、ActionMethod[ValidateInput(false)]で修飾し、単一のActionMethodのリクエスト検証をオフにすることができます。ハンディ。また、web.configファイルに変更を加える必要がないため、他のすべての場所で.NET 4要求検証を使用できます。

例えば.

[ValidateInput(false)]
public ActionMethod Edit(int id, string value)
{
    // Do your own checking of value since it could contain XSS stuff!
    return View();
}
56
Tom Chantler

これは、検証モードを変更せずに機能します。

System.Web.Helpers.Validation.UnvalidatedSystem.Web.WebPages.dllヘルパーを使用する必要があります。検証なしでフォームとQueryStringにアクセスできるUnvalidatedRequestValuesオブジェクトを返します。

例えば、

var queryValue = Server.UrlDecode(Request.Unvalidated("MyQueryKey"));

MVC3および.NET 4で動作します。

28
Assassin

別のアプローチは、4.0検証動作を維持することですが、RequestValidatorから派生して設定する独自のクラスを定義することです。

<httpRuntime requestValidationType="YourNamespace.YourValidator" />

YourNamespace.YourValidatorは問題ありませんが、推測できるはずです...)

このようにして、4.0sの動作の利点(具体的には、検証が処理の早い段階で行われること)を維持しながら、通過させる必要がある要求も許可します。

15
Jon Hanna