Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/redis/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Vb.net 从Mvc路由返回错误的http状态代码_Vb.net_Asp.net Mvc 2_Http Status Code 404_Http Status Codes - Fatal编程技术网

Vb.net 从Mvc路由返回错误的http状态代码

Vb.net 从Mvc路由返回错误的http状态代码,vb.net,asp.net-mvc-2,http-status-code-404,http-status-codes,Vb.net,Asp.net Mvc 2,Http Status Code 404,Http Status Codes,我有一个asp.NETMVC路由,它接受一个url并执行一个简单的get,然后从请求返回状态代码 <AcceptVerbs(HttpVerbs.Post)> _ Public Function ValidateUrlStatusCode(ByVal url As String) As ActionResult Dim code As Integer = 0 Try Dim request As HttpWebRequest = CType(WebReques

我有一个asp.NETMVC路由,它接受一个url并执行一个简单的get,然后从请求返回状态代码

<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返回值。但是,如果我使用我的应用程序通过ajax调用调用mvc路由,我会得到200。如果我将请求对象的AllowAutoRedirect设置为false,则得到302。我从来没有得到过404。我正在通过Firebug再次验证这一点。有人能指出我做错了什么吗


谢谢

如果您使用FaceBook,请确保您设置了用户代理,否则网站会将您重定向到一个标准HTML页面,解释您这样做的原因(因此200状态码):

此外,当HttpWebRequest返回的状态代码不同于200时,将引发异常,更具体地说,是一个异常。因此,您需要将其捕获,并在包含的属性中找到404状态码

此外,我可能会使用一个简化代码:

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>

$.ajax({
url:'@url.Action(“ValidateUrlStatusCode”),
键入:“POST”,
数据:{url:'http://www.facebook.com/blah.html' },
成功:功能(结果){
警报(结果);
}
});
<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>