#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-запрос, чтобы протестировать его.