2010-03-29 47 views
8

我想,以确定是否对http://www.accreditedqualifications.org.uk 形式存在资格:C#检测页面重定向

http://www.accreditedqualifications.org.uk/qualification/50084811.seo.aspx

50084811进行资格目的由最终用户输入。

如果他们输入无效的例如

http://www.accreditedqualifications.org.uk/qualification/50084911.seo.aspx

他们将被重定向到一个错误页面(不正确的HTTP头,据我可以看到)。有没有办法在C#中检测重定向。我希望能够检测到http头中的重定向(认为它会发出2)或类似的反对必须下载整个页面。这可能会发生很多,所以我想尽量减少流量。

编辑

用它来看看头看起来像两个是一个无效页面发出:

http://pageheaders.com/display-http-headers.php?url=http%3A%2F%2Fwww.accreditedqualifications.org.uk%2Fqualification%2F50084911.seo.aspx&agent=ie6

回答

12

最简单的方法可能是使用来获取内容HEAD请求(将Method设置为“HEAD”)的HttpWebRequest设置为AllowAutoRedirect为false。我不记得那是否会导致异常,但无论如何应该很容易处理。

+0

发现这个http://stackoverflow.com/questions/924679/c-how-can-i-check-if-a-url-exists-is-valid我认为它沿着正确的路线,但因为是该网站不发出404或类似的不工作。我会继续尝试。 – PeteT 2010-03-29 15:07:56

+0

@ petebob796:使用'WebClient'可能无法给您足够的控制权。特别是,它不允许你关闭自动重定向(据我所知)。使用HttpWebRequest并查看响应代码。 301和302是正常的重定向响应码。 – 2010-03-29 15:25:03

+0

感谢现在使用HttpWebRequest和HttpWebResponse随request.AllowAutoRedirect = false;和request.Method =“HEAD”;. 对于其他读者,我被StatusCode抓住了一秒钟,它返回“OK”,“NOT FOUND”...但它是一个枚举,可以转换为实际的错误301,302 ... – PeteT 2010-03-29 15:57:10

0

您只能使用服务器上的Web客户端来执行此操作。如果您将链接提供给您的客户,那么之后您将不会参与他与认证的qualificationsweb服务器之间的通信,因此您将无法获取该链接已重定向到错误的信息。

就我所能理解的项目而言,我会使用我的服务器上的Webclient(或曾经的)进行一些调用,以确保存在限定条件并将结果存储在数据库中的缓冲时间。这将允许不要打太多的电话,并获得可靠的信息。

+0

这实际上是一个winforms项目,而不是asp.net我只需要验证他们输入的目标是否基于它在网站上的有效性。 – PeteT 2010-03-29 15:15:00

10

有许多不同的代码可以返回。你可以查看各种代码一拉:

response.StatusCode == HttpStatusCode.Redirect 

您可以在http://msdn.microsoft.com/en-us/library/system.net.httpstatuscode.aspx

或者查看所有的可能性,你可能会发现它足以为您在回应中的位置是不同的。

var request = (HttpWebRequest)WebRequest.Create(uri); 
request.Method = "HEAD"; 
request.AllowAutoRedirect = false; 

string location; 
using (var response = request.GetResponse() as HttpWebResponse) 
{ 
    location = response.GetResponseHeader("Location"); 
} 
return (location != uri.OriginalString);