C# HttpWebRequest - 如何确定是不是发生了 HTTP 301?

Posted

技术标签:

【中文标题】C# HttpWebRequest - 如何确定是不是发生了 HTTP 301?【英文标题】:C# HttpWebRequest - How to determine if HTTP 301 Occured?C# HttpWebRequest - 如何确定是否发生了 HTTP 301? 【发布时间】:2011-10-18 17:30:04 【问题描述】:

我正在为 ASP.NET MVC Web 应用程序测试我的 HTTP 301 重定向(永久移动)。

我使用以下代码创建了一个测试页面:

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(OK),因为它正在读取最后一个响应(例如它被重定向到的页面)。

URL 将访问我的重定向控制器,它会返回:

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

这就是我想要捕获的,而不是它被重定向到的页面的 200。

我该怎么做?

【问题讨论】:

【参考方案1】:

你需要关闭automatic redirection following:

req.AllowAutoRedirect = false;

【讨论】:

【参考方案2】:

如果您希望请求自动跟随 HTTP 重定向标头到资源的新位置,请将 AllowAutoRedirect 设置为 true。

如果 AllowAutoRedirect 设置为 false,则所有 HTTP 状态代码从 300 到 399 的响应都将返回给应用程序。

您还可以通过MaximumAutomaticRedirections 属性设置最大重定向次数。

使用它来停止自动重定向 myHttpWebRequest.AllowAutoRedirect=false;

【讨论】:

以上是关于C# HttpWebRequest - 如何确定是不是发生了 HTTP 301?的主要内容,如果未能解决你的问题,请参考以下文章

C# HttpWebRequest - 如何在不下载的情况下区分 HTML 和 XML 页面?

如何使用 c# 使用 httpwebrequest 从 json api 获取数据?

C# HttpWebRequest 如何实现SOCKET5代理

c# httpwebrequest 模拟登陆

用c#编写webservice时,如何获取调用它的httpwebrequest中?后面的参数 非常感谢。

HttpWebRequest 超时(被阻塞) c#