Попытка настроить действие контроллера в качестве конечной точки Xml - PullRequest
0 голосов
/ 19 июля 2011

Я хотел создать конечную точку POX с помощью действия контроллера ASP.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 моего действия контроллера равен null.*

Запрос без заголовка 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 Ответ

1 голос
/ 20 июля 2011

Это точно не text/xml, что вы отправляете в теле запроса.Это стандартная форма name=value пара.

Либо:

  • действительно отправляет данные в виде блоба XML (и для этого может потребоваться атрибут в методе)
  • или используйте стандарт Content-Type, который используют все формы HTML (то есть application/x-www-form-urlencoded), и экранируйте значение с помощью кодировки URL.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...