ckeditorを使用するフォームがあります。このフォームは、Asp.Net 2.0および3.5では正常に機能しましたが、Asp.Net4以降では機能しなくなりました。ValidateRequest="false"ディレクティブがあります。助言がありますか?
5 に答える
エラーページ自体で解決策が見つかりました。web.configに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
with[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
。UnvalidatedRequestValues
検証なしでフォームと QueryString にアクセスできるオブジェクトを返します。
例えば、
var queryValue = Server.UrlDecode(Request.Unvalidated("MyQueryKey"));
MVC3 と .NET 4 で動作します。
RequestValidator
別のアプローチは、4.0 の検証動作を維持することですが、派生して設定する独自のクラスを定義することです。
<httpRuntime requestValidationType="YourNamespace.YourValidator" />
(どこYourNamespace.YourValidator
がいいのか、推測できるはずです...)
このようにして、4.0 の動作の利点 (具体的には、検証が処理の早い段階で行われる) を維持しながら、必要な要求を通過させることもできます。