【问题标题】:302 redirect still attempting to run original request302 重定向仍在尝试运行原始请求
【发布时间】: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


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 2017-06-01
    • 2015-07-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-11-26
    • 2011-08-29
    • 2020-06-27
    • 1970-01-01
    相关资源
    最近更新 更多