如何正确设置 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