尝试将控制器操作设置为Xml端点

时间:2011-07-19 16:51:10

标签: asp.net-mvc asp.net-mvc-2

我想通过使用ASP.NET MVC 2控制器操作来构建POX端点。我以为我可以重复使用大量的工作代码并在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

如何使用我的控制器操作,而无需在客户端上设置Accept-Encoding标头?

1 个答案:

答案 0 :(得分:1)

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

或者:

  • 确实将数据作为XML blob发送(并且可能需要该方法的属性)
  • 或使用所有HTML表单使用的标准Content-Typeapplication/x-www-form-urlencoded),并使用网址编码转义值。