【问题标题】:Redirecting ASP.NET Page重定向 ASP.NET 页面
【发布时间】:2010-08-22 16:13:47
【问题描述】:

有句话要说。这是有史以来最好的 .NET 社区。继续加油!

我最近遇到一个问题,我设法为它提供了 2 个解决方案,我想知道我应该选择哪一个。

问题在这里:

当用户请求我的网站 (www..com) 时,我会将他重定向到 (www..com/en),因为它是一个多语言网站.

我正在使用 .NET 路由到那个。

在 default.aspx 页面的 Page_Load 中,我检查路由集合中的语言是否可用,我不重定向。如果它不可用,我会重定向到 (www.___.com/en)。这是代码:

    if (Page.RouteData.Values.Count == 0)
    {
        if (SessionManager.IsUserAuthenticated)
        {
            //Redirect To User HomePage for his Main Language
            Page.Response.Redirect(UserManager.GetUserMainPageWhenLoggedIn(SessionManager.LoggedUser.LanguageID,true));                                
        }
        else
        {
            Page.Response.Redirect(String.Format("~/{0}", Cultures.en.ToString()), true);
            Helpers.SetCulture(Cultures.en.ToString());
        }

    }

我正在使用 Response.Redirect 来做到这一点。现在,如果我将方法参数设置为 End The Response,它将抛出一个异常,以便我可以通过它来处理它

 try
    {
       this.InitializeLayout();
    }
    catch (ThreadAbortException ex)
    {

    }
    catch (Exception ex)
    {
        ExceptionManager.LogException(ex);
    }

如果我不结束响应,页面将执行整个生命周期,重定向,然后再次执行,这会导致页面的双重执行。

我的主要目标不是执行页面 2 次以最小化处理(如果网站受到大流量的冲击)。如果我结束响应,将抛出 ThreadAbortExeption,我认为这对站点不利。(我可以捕获它而不记录它)。

你们怎么看?

【问题讨论】:

    标签: asp.net response


    【解决方案1】:

    正如您所说,您可以通过将 false 传递给 endResponse 参数来避免引发异常。如果您想避免执行该页面,您还可以调用 HttpContext.Current.ApplicationInstance.CompleteRequest(); 这应该会跳过页面上的其余代码。

    但是请注意,回发和渲染方法仍将执行。如果你想避免这种情况,你必须明确地包含代码来忽略它们。通过覆盖 RaisePostBackEventRender 方法来做到这一点的一个很好的例子在这里: --> http://www.c6software.com/articles/ThreadAbortException.aspx

    【讨论】:

      【解决方案2】:

      您可以使用 global.asax 文件中的 Application_BeginRequest 事件处理程序或 HttpHandler 进行重定向。在这两种情况下,您都可以避免拨打 2 次电话。

      我还建议您使用 server.Transfer 而不是 response.redirect。

      【讨论】:

        猜你喜欢
        • 2011-08-21
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-12-26
        • 2019-05-10
        • 2015-10-15
        相关资源
        最近更新 更多