2

我有一個asp.net mvc路由,它正在取得一個url並做一個簡單的get和從請求中返回狀態碼。從Mvc路由返回不正確的http狀態代碼

<AcceptVerbs(HttpVerbs.Post)> _ 
Public Function ValidateUrlStatusCode(ByVal url As String) As ActionResult 
    Dim code As Integer = 0 

    Try 
     Dim request As HttpWebRequest = CType(WebRequest.Create(url), HttpWebRequest) 
     request.Method = "GET" 
     request.AllowAutoRedirect = True 
     Using response As HttpWebResponse = request.GetResponse 
     response.Close() 
     code = response.StatusCode 
     End Using 
    Catch ex As Exception 
     code = HttpStatusCode.InternalServerError 
    End Try 
    Return Content(code, "text/plain") 
End Function 

現在,如果我使用Firefox(使用Firebug)並轉到網址http://www.facebook.com/blah.html,我得到預期的404返回。但是,如果我使用我的應用程序通過ajax調用來調用mvc路由,則獲得200.如果將請求對象的AllowAutoRedirect設置爲false,則獲得302.我從來沒有獲得404。我正通過Firebug再次驗證這一點。任何人都可以指出我做錯了什麼?

謝謝!

回答

1

如果你使用Facebook確保您設置的用戶代理或網站將您重定向到一個標準的HTML頁面,說明您這樣做(這樣的200個狀態碼):

request.UserAgent = "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:2.0) Gecko/20100101 Firefox/4.0"; 

此外,當狀態從HttpWebRequest返回不同於200的代碼將拋出一個異常,更具體地說是WebException。因此,您需要捕獲此WebException並在Response屬性中包含HttpWebResponse,您會發現404狀態碼。

此外,我可能會使用一個WebClient以簡化代碼:

Public Function ValidateUrlStatusCode(url As String) As ActionResult 
    Dim code = 0 
    Try 
     Using client = New WebClient() 
      client.Headers(HttpRequestHeader.UserAgent) = "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:2.0) Gecko/20100101 Firefox/4.0" 
      Dim response = client.DownloadString(url) 
     End Using 
    Catch ex As WebException 
     Dim httpResponse = TryCast(ex.Response, HttpWebResponse) 
     If httpResponse IsNot Nothing Then 
      code = CInt(httpResponse.StatusCode) 
     End If 
    End Try 

    Return Content(code.ToString(), "text/plain") 
End Function 

和客戶端上:

<script type="text/javascript"> 
    $.ajax({ 
     url: '@Url.Action("ValidateUrlStatusCode")', 
     type: 'POST', 
     data: { url: 'http://www.facebook.com/blah.html' }, 
     success: function (result) { 
      alert(result); 
     } 
    }); 
</script> 
+0

偉大的工作,謝謝! – 2011-04-27 20:31:39