2011-07-28 31 views
3

我们有一段代码检测旧的URL并执行如下的重定向: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为“否”而出现服务器500错误更长的可接受。

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

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

+1

我认为这是相当有意义的,你试图执行这段代码。这是global.asax中的事件,这是一个控制器操作,一个过滤器,一个http处理程序? –

+0

@Tz_很好,我会编辑帖子 –

回答

5

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

+0

完美!像魅力一样工作! ... 谢谢 ! –