我使用 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'?...")
这个第三方网站对我的处理程序所做的每个帖子都在帖子中包含两种格式的数据。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 处理程序关闭表单验证?