Могу ли я отправить пустой объект HTTP POST WebRequest из C # в IIS?

#c# #iis-7 #webrequest

#c# #iis-7 #webrequest

Вопрос:

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

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

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

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

Удаленный сервер вернул ошибку: (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();
}
  

Ответ №1:

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

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

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

Ответ №2:

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

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

Вы могли бы попробовать GET-запрос, чтобы протестировать его.