2

URL을 가져 와서 간단한 get 및 요청에서 상태 코드를 반환하는 asp.net mvc 경로가 있습니다. 나는 파이어 폭스 (방화범을 사용)하고 URL http://www.facebook.com/blah.html로 이동 사용하는 경우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 

지금, 나는 기대 (404) 반환받을. 그러나 내 응용 프로그램을 사용하여 아약스 호출을 통해 mvc 경로를 호출하면 200이됩니다. 요청 개체의 AllowAutoRedirect를 false로 설정하면 302가됩니다. 나는 404를 얻지 못합니다.이 문제는 Firebug를 통해 다시 한번 확인하고 있습니다. 아무도 내가 잘못하고있는 것을 지적 할 수 있습니까?

감사합니다.

답변

1

당신이 페이스 북을 사용하는 경우 사용자 에이전트를 설정하거나 사이트 (따라서 200 상태 코드) 당신이 그렇게 설명하는 표준 HTML 페이지로 리디렉션됩니다 확인하십시오

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

상태를 HttpWebRequest에서 200 이외의 코드가 반환되면 예외가 throw되며 더 구체적으로 WebException입니다. 따라서 WebException을 함정에 넣고 HttpWebResponse이 들어있는 Response 속성 안에 404 StatusCode가 있습니다. 클라이언트에서

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 

을 그리고 :

은 또한 아마 코드를 단순화하기 위해 WebClient을 사용

<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

큰 일, 감사합니다! –

관련 문제