我正在使用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永远不会被提升。我不确定为什么,我已经试图解决这个问题几个小时无济于事。
答案 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