【发布时间】:2011-10-15 02:10:55
【问题描述】:
我们有一段代码可以检测旧 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 方法执行。
【问题讨论】:
-
我认为在您尝试执行此代码 sn-p 的位置非常相关。这是 global.asax 中的事件,是控制器操作、过滤器还是 http 处理程序?
-
@Tz_ 很好……我会编辑帖子
标签: c# asp.net asp.net-mvc-3 redirect http-status-code-302