3

我们有一段代码可以检测旧 URL 并执行重定向,如下所示:

Response.Clear();
Response.StatusCode = 301;
Response.Status = "301 Moved Permanently";
try
{
    Response.AddHeader("Location", MyLink.GetFullPath());
} catch
{
    Response.StatusCode = 302;
    Response.Status = "302 Moved Temporarily";
    Response.AddHeader("Location", "/");
}
Response.End();

本质上发生的是尝试进行 301 永久重定向,如果这不成功,则将“302 临时移动”抛出到默认主页。

问题:我遇到的问题如下。如果输入了 URL(例如“/product/ABC123”)。URL 301 重定向失败,catch 中的 302 重定向被执行,但是原来的 URL ("/product/ABC123") 仍然在后台执行。当我在调试器中运行网站时,302 重定向工作正常,默认主页出现,然后半秒后执行补充页面并出现服务器 500 错误,因为原始 URL 不是更长的时间可以接受。

我的问题如下:我怎样才能完全停止原始请求,让 302 重定向做它需要做的事情。我试过“HttpContext.ApplicationInstance.CompleteRequest();” 在“Response.End()”下方,但它并没有停止原始请求。

编辑:重定向代码是从 Controller 类的 Index 方法执行的。

4

1 回答 1

4

如果您处于控制器操作中,请退出操作方法并返回new HttpStatusCodeResult(302).

于 2011-07-28T13:14:54.183 回答