Могу ли я отправить пустой объект HTTP POST WebRequest из C # в IIS? - PullRequest
9 голосов
/ 06 мая 2011

Нужно ли просто добавить некоторые случайные данные мусора в объект WebRequest, чтобы получить ограничение IIS по коду статуса HTTP 411?

У меня есть метод действия HttpPost в приложении MVC 3, которое потребляетPOST-запрос со всей соответствующей информацией, передаваемой в строке запроса (тело не требуется).

[HttpPost] public ActionResult SignUp(string email) { ... }

Он отлично работал на встроенном веб-хосте Visual Studio Cassini.К сожалению, как только код MVC появился в IIS [7.5 в 2008 R2], сервер передает код ошибки HTTP, когда я нажимаю его из моего внешнего приложения на C #.

Удаленный сервер вернулсяошибка: (411) Необходимая длина.

Вот код вызова:

WebRequest request = WebRequest.Create("http://somewhere.com/signup/?email=a@b.com");
request.Method = "POST";
using (WebResponse response = request.GetResponse())
using (Stream responseStream = response.GetResponseStream())
using (StreamReader responseReader = new StreamReader(responseStream)) {
    // Do something with responseReader.ReadToEnd();
}

Ответы [ 2 ]

21 голосов
/ 06 мая 2011

Оказывается, это можно сделать, просто добавив пустую длину содержимого в запрос перед отправкой.

WebRequest request = WebRequest.Create("http://somewhere.com/signup/?email=a@b.com");
request.Method = "POST";
request.ContentLength = 0;

Не уверен, как явное указание пустой длины и подразумеваемой длины имеет значение, но IIS был счастлив после того, как я это сделал. Возможно, есть и другие способы обойти это, но это кажется достаточно простым.

1 голос
/ 06 мая 2011

Я считаю, что вы должны устанавливать заголовок Content-Length каждый раз, когда отправляете запрос на веб-сервер:

http://msdn.microsoft.com/en-us/library/system.web.httprequest.contentlength.aspx

Вы можете попробовать запрос GET для его проверки.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...