通过HTTP POST将XML数据发送到IHttpHandler会导致HttpRequestValidationException

时间:2011-01-20 10:20:02

标签: .net asp.net ihttphandler

我正在编写一个IHttpHandler实现,它将接收来自其他网站的常规HTTP POST发送的XML数据。 这是实现的原型:

public class MyHandler : IHttpHandler
{
   public void ProcessRequest(HttpContext context)
   {
      string s = context.Request.Form["input"]; // <== this throws HttpRequestValidationException
      XmlDocument doc = new XmlDocument();
      doc.LoadXml(s);
      // ...
   }

   public bool IsReusable
   {
      get { return false; }
   }
}

我正在使用这个简单的页面测试实现:

<body>
   <form method="post" action="MPSConnector.Results.dsvc">
      <textarea name="input"></textarea>
      <input type="submit" value="Go!" />
   </form>
</body>

问题在于,当我尝试从发布的数据中读取“输入”值时,如果它包含一个xml字符串,那么我得到的只是一个HttpRequestValidationException。 我尝试使用

<pages validateRequest="false">
在web.config中

,并在httpHandles部分的处理程序声明中放置validate =“false”属性,但没有结果。

如何在我的处理程序中阅读已发布的xml? (请注意,我必须使用IHttpHandler执行此任务)。

编辑:框架版本:4.0,IIS 7.x

谢谢大家! :)

2 个答案:

答案 0 :(得分:0)

据我所知,您只需要使用实体对该XML进行编码。

我的意思是&lt;应该是&amp; LT;或者&gt; &安培; gt;等等。

编辑:我发现这与以下内容重复:How can Request Validation be disabled for HttpHandlers?

试试这个!! :)

答案 1 :(得分:0)

只需像这样修改web.config:

   <location path="Handlers/MyHandler.ashx">
      <system.web>
         <httpRuntime requestValidationMode="2.0" />
      </system.web>
   </location>