Ckeditorを使用するフォームがあります。このフォームは、Asp.Net 2.0および3.5では正常に機能していましたが、Asp.Net 4+では機能しなくなりました。 ValidateRequest = "false"ディレクティブがあります。助言がありますか?
エラーページで解決策が見つかりました。 requestValidationMode = "2.0"を追加する必要がありました
<system.web>
<compilation debug="true" targetFramework="4.0" />
<httpRuntime requestValidationMode="2.0" />
</system.web>
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>
これは古い質問ですが、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();
}
これは、検証モードを変更せずに機能します。
System.Web.Helpers.Validation.Unvalidated
のSystem.Web.WebPages.dll
ヘルパーを使用する必要があります。検証なしでフォームとQueryStringにアクセスできるUnvalidatedRequestValues
オブジェクトを返します。
例えば、
var queryValue = Server.UrlDecode(Request.Unvalidated("MyQueryKey"));
MVC3および.NET 4で動作します。
別のアプローチは、4.0検証動作を維持することですが、RequestValidator
から派生して設定する独自のクラスを定義することです。
<httpRuntime requestValidationType="YourNamespace.YourValidator" />
(YourNamespace.YourValidator
は問題ありませんが、推測できるはずです...)
このようにして、4.0sの動作の利点(具体的には、検証が処理の早い段階で行われること)を維持しながら、通過させる必要がある要求も許可します。