如何正确设置HTTPContext的状态代码

时间:2015-04-07 18:25:49

标签: iis-7 webforms vb.net-2010

我正在使用webforms,因此我使用vb.net在服务器2012上运行IIS 8上的网站。我们在Global.asax上发生了一些URL重定向,在Application_BeginRequest事件上打开一个XML文件,并将传入的请求与XML中的转换请求进行比较。如果通过搜索XML无法满足请求,那么我们需要首先引发410状态代码,然后重定向到通用页面。所以,我试图这样做的方式是

   HttpContext.Current.Items.Add("Raise410", "true")
   HttpContext.Current.Items.Add("Redirect", "/" + dv(0)("folder"))
   Throw New HttpException(410, "Gone")

然后在异常捕获上我这样做:

     Catch ex As Exception
        If HttpContext.Current.Items("Raise410") IsNot Nothing Then
            HttpContext.Current.Response.StatusCode = 410
            HttpContext.Current.Response.Redirect(HttpContext.Current.Items("Redirect"))
        End If
    End Try

然而,我得到的只是302重定向而410永远不会被提升。我不确定为什么,我已经试图解决这个问题几个小时无济于事。

1 个答案:

答案 0 :(得分:1)

您的方法存在一些设计缺陷。 410 Gone 和301 Redirect 都是HTTP状态代码。

您无法返回响应,然后从服务器代码重定向。

一种可能的方法是从服务器端返回HTTP / 410并使用META refresh或使用setTimeout在客户端进行重定向,并将window.location设置为您所在的网址想要重定向:

setTimeout(function() {
    window.location = "http://";
}, 6000); // 6 seconds and do the redirect