2013-10-02 73 views
0

當我們重定向到另一個頁面(例如到其他網站的頁面)時,服務器響應時使用http狀態碼。如果一切正常,則返回200.
當我撥打Response.Redirect時,如何檢測從遠程服務器返回的http狀態碼?
我希望登錄數據庫重定向是否正確執行。在asp.net重定向後獲取http狀態碼

回答

0

你不行。您將訪問者的瀏覽器重定向到另一個URL。如果該URL不指向您控制的服務器,則無法看到該請求是如何發生的。

+0

但是我在某些網站上看到,那個日誌200好了或者重定向後的另一個代碼 – mmtemporary

+0

是它的IIS日誌嗎? – User2012384

0

當您編寫Response.Redirect(...)時,這會導致您的站點發送一個HTTP 302(移動)回到客戶端瀏覽器......並且就服務器而言,這是故事的結尾 - 與客戶端的連接是關閉,你沒有更多的互動。

您根本無法檢測到客戶端瀏覽器然後加載了您的302所指示的資源,除非該資源碰巧位於您自己的服務器上 - 在您的情況下,它不是。

我可以看到你檢查這在任何半meanginful方式的唯一方法是,如果您代表客戶第一在後面自己的代碼中做一次檢查通過發出自己的HTTP GET的重定向位置...但這仍然只是告訴你,在你檢查的時候,你的遠程資源給你

但你仍然不能說基於你獲得HTTP 200,客戶端也能夠訪問它(防火牆,連接不良,黑名單,拋開現在你把請求翻倍的問題加載該遠程資源..),說實話,我不會建議,即使打擾這樣做,因爲它不是一個100%可靠的方法。

0

好的這可能不是一個完美的解決方案,但它肯定是我的書中可以接受的解決方法。這裏的想法是,你可以確定給定URL的預期HttpStatusCode應該是什麼。

public HttpStatusCode GetRedirectStatusCode(string destinationUrl) 
{ 
    var request = (HttpWebRequest)WebRequest.Create(destinationUrl); 
    request.Method = "HEAD"; 
    request.KeepAlive = false; 
    request.ProtocolVersion = HttpVersion.Version10; 
    request.Timeout = 180000; 

    using(var response = (HttpWebResponse)request.GetResponse()) 
    { 
     return response.StatusCode; 
    } 
}