C # HttpWebRequest - Как определить, произошел ли HTTP 301? - PullRequest
8 голосов
/ 03 августа 2011

Я провожу некоторое тестирование моих перенаправлений HTTP 301 (перемещенных навсегда) для веб-приложения ASP.NET MVC.

Я создал тестовую страницу со следующим кодом:

try
{
    var req = (HttpWebRequest) WebRequest.Create(url);
    resp = (HttpWebResponse) req.GetResponse();
    return Json(new {statusCode = (int) resp.StatusCode});  
}
catch (Exception exc)
{
    return Json(new { statusCode = (int)HttpStatusCode.InternalServerError });
}
finally
{
    if (resp != null) resp.Close();
}

Но проблема в том, что код состояния HTTP 200 (ОК), поскольку он читает последний ответ (например, страницу, на которую он был перенаправлен).

URL попадет на мой контроллер перенаправления, который возвращает это:

return RedirectToRoutePermanent("SomeRoute", new { id = someId });

И это то, что я хочу захватить, а не 200 страниц, на которые он перенаправляется.

Как мне это сделать?

Ответы [ 2 ]

13 голосов
/ 03 августа 2011

Вам нужно отключить автоматическое перенаправление после :

req.AllowAutoRedirect = false;
1 голос
/ 09 октября 2013

Установите для AllowAutoRedirect значение true, если вы хотите, чтобы запрос автоматически следовал заголовкам перенаправления HTTP на новое местоположение ресурса.

Если для AllowAutoRedirect установлено значение false, все ответы с кодом состояния HTTP от 300 до 399 возвращаются в приложение.

Вы также можете установить максимальное количество перенаправлений, которым следует свойство MaximumAutomaticRedirections.

используйте это, чтобы остановить автоматическое перенаправление myHttpWebRequest.AllowAutoRedirect=false;

...