ASP.NET v2.0 を使用して IIS6 で実行されているサイト用に作成した汎用 http ハンドラーに問題があります。ハンドラーの仕事は、サードパーティのサイトからの投稿を受け入れ、データの翻訳を行い、投稿を介して別のサイトに転送することです。これはすべてうまくいきます。私が抱えている問題は、ハンドラーへの POST の一部が失敗し、次のメッセージが表示されることです。
2013-11-03 00:22:39 Message: A potentially dangerous Request.Form value was
detected from the client (data.xml="<?xml version='1.0'?...")
このサードパーティ サイトがハンドラーに対して行うすべての投稿には、2 つの形式のデータが含まれます。data.json には json 形式のデータが含まれ、data.xml には xml 形式のデータが含まれます。なぜサイトがこのようにするのかはわかりません。送信する形式を構成することはできません。常にデータを双方向に送信するだけです。
これは ASP.NET v2 サイトで<httpRuntime requestValidationMode="2.0" />
あるため、サポートされていません (これは大規模なサイトであるため、とにかくサイト全体で無効にしたくありません)。また、web.configでこれを使用して検証をオフにしようとしました:
<configuration>
<deleted details />
<location path="~/Handlers/PostTranslator.ashx">
<system.web>
<pages validateRequest="false" />
</system.web>
</location>
<deleted details />
</configuration>
上記の変更は違いを生むようには見えませんでした。
私が逃した Request.Form 検証をオフにする明確な方法はありますか? または、これは一般的な http ハンドラーであるため、何らかの制限がありますか?
エラーをスローするコードは単純です。
public void ProcessRequest(HttpContext context) {
var form = context.Request.Form;
}
ハンドラーは、次のように web.config に登録されます (重要な場合)。
<add verb="*" path="PostTranslator.ashx"
type="My.Web.UI.Site.Handlers.PostTranslator, My.Web.UI.Site" />
実行時の出力は次のaspnet_regiis -lk
とおりです(64ビットとして実行):
W3SVC/9755868907/root 2.0.50727.0
この http ハンドラだけのフォーム検証をオフにする方法はありますか?