试图将控制器动作设置为Xml端点



我想通过使用ASP来构建一个POX端点。. NET MVC 2控制器动作。我认为我将能够重用大量的工作代码,并在15分钟内完成。我错了。我的动作看起来像这样:

[HttpPost]
[ValidateInput(false)]
public ContentResult DoSomething(string xml)

ValidateInput属性是必需的,否则在向操作提交Xml时会得到一个令人讨厌的验证异常。

客户端代码:

var req = (HttpWebRequest)WebRequest.Create(endPoint);
req.Method = "POST";
req.ContentType = "text/xml";
req.Headers.Add("Accept-Encoding", "gzip,deflate,sdch");
// ...open request, read response now

这是工作代码。以下请求被发送到端点(fiddler2)

POST http://doerak/Veekijker/Service.aspx/Melding HTTP/1.1
Content-Type: text/xml
Accept-Encoding: gzip,deflate,sdch
Host: theHost
Content-Length: 2220
Expect: 100-continue
Connection: Keep-Alive
Xml=theXml

然而,当我从客户端代码中删除"Accept-Encoding"标头时,我的控制器动作的xml字符串参数为空。

没有accept-encoding头的请求看起来像这样

POST http://doerak/Veekijker/Service.aspx/Melding HTTP/1.1
Content-Type: text/xml
Host: theHost
Content-Length: 2220
Expect: 100-continue
Xml=theXml

我如何使用我的控制器动作,而不必在客户端设置接受编码头?

这肯定不是您在请求正文中发送的text/xml。是标准形式的name=value

:

  • 真正将数据作为XML blob发送(并且可能需要在方法中添加属性)
  • 或使用所有HTML表单都使用的标准Content-Type(即application/x-www-form-urlencoded),并使用URL编码转义值

最新更新