302重定向仍在尝试运行原始请求

时间:2011-07-28 12:20:31

标签: c# asp.net asp.net-mvc-3 redirect http-status-code-302

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

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 Moved Temporarily”抛出到默认主页。

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

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

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

1 个答案:

答案 0 :(得分:5)

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