0

I wanted to build a POX endpoint by using an ASP.NET MVC 2 controller action. I thought I would be able to reuse a lot of working code and be done in 15 min tops. I was wrong. My action looks like this:

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

The ValidateInput attribute is required because you'll get a nasty validation exception otherwise when posting Xml to the action.

The client code:

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

This is working code. The following request is sent to the endpoint (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

However, when I remove the "Accept-Encoding" header from the client code, the xml string parameter of my controller action is null.

The request without the accept-encoding header looks like this

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

Xml=theXml

How can I use my controller action, without having to set the Accept-Encoding header on the client?

tereško
  • 58,060
  • 25
  • 98
  • 150
SanderS
  • 93
  • 1
  • 6

1 Answers1

1

This for sure isn't text/xml that you're sending in the request body. It's a standard form name=value pair.

Either:

  • really send the data as XML blob (and that maybe needs an attribute at the method)
  • or use the standard Content-Type that all HTML forms use (which is application/x-www-form-urlencoded), and escape the value with URL encoding.
vdboor
  • 21,914
  • 12
  • 83
  • 96