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