如何正确设置 HTTPContext 的状态码
How to properly set status code for HTTPContext
我正在使用网络表单,因此我在服务器 2012 的 IIS 8 上有一个网站 运行,使用 vb.net。我们在 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 从未出现过。我不确定为什么,而且我已经尝试了几个小时来解决这个问题,但无济于事。
您的方法存在一些设计缺陷。 410 Gone 和 301 Redirect 都是 HTTP 状态代码。
您不能 return 响应然后从服务器代码重定向。
一种可能的方法是从服务器端 returning HTTP/410 并在客户端使用 META refresh 或使用 setTimeout
并设置 window.location
到您要重定向的 URL:
setTimeout(function() {
window.location = "http://";
}, 6000); // 6 seconds and do the redirect
我正在使用网络表单,因此我在服务器 2012 的 IIS 8 上有一个网站 运行,使用 vb.net。我们在 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 从未出现过。我不确定为什么,而且我已经尝试了几个小时来解决这个问题,但无济于事。
您的方法存在一些设计缺陷。 410 Gone 和 301 Redirect 都是 HTTP 状态代码。
您不能 return 响应然后从服务器代码重定向。
一种可能的方法是从服务器端 returning HTTP/410 并在客户端使用 META refresh 或使用 setTimeout
并设置 window.location
到您要重定向的 URL:
setTimeout(function() {
window.location = "http://";
}, 6000); // 6 seconds and do the redirect