【问题标题】:Response.Redirect() to redirect to a page in a subfolderResponse.Redirect() 重定向到子文件夹中的页面
【发布时间】:2012-01-23 00:07:16
【问题描述】:

我正在使用Response.Redirect("login.aspx");

由于我将我的login.aspx 移动到我的Account 子文件夹,我尝试了以下代码,但它不起作用。

Response.Redirect("Account/login.aspx");

此尝试重定向到此的 URL:

http://localhost/BuzzEnhance/Account/Login.aspx

完整代码为:

public partial class BuzzMaster : MasterPage
{
    protected void Page_Load(object sender, EventArgs e)
    {
        if (!IsPostBack)
        {
            if (Session["Username"] != null)
            {
                username.Text = Session["Username"].ToString();
            }
            else
            {
                Response.Redirect("Account/Login.aspx");
            }
        }
    }    
}

还有一件事,默认页面和登录页面都使用相同的母版页。

【问题讨论】:

  • -1 甚至没有尝试发布可读的问题。
  • 至少粘贴代码没有拼写错误(英文错误是可以接受的,但是你发布的response到处都有错字,而且你发布的网址和重定向行不匹配)
  • 已编辑 .. 我需要从根文件夹转到子文件夹名称 Accont 和名为 login.aspx 的页面 .. 如何
  • @ShadowWizard 现在阅读它...
  • 仍然充满错误,包括您的代码。

标签: c# asp.net .net relative-path response.redirect


【解决方案1】:

OP 说

“自从我将login.aspx 移动到我的Account 子文件夹后,我尝试了以下代码,但它不起作用。”

还有另一种情况可能会导致某些行为。web.config 中,您可能拥有允许的位置。除非您打开一个已添加的此类位置,否则您不会被重定向到那里

<location path="Account/login.aspx">
  <system.web>
    <authorization>
      <allow users="*" />
    </authorization>
  </system.web>
</location>

上面的 ^^ 设置后,Response.Redirect("~/Account/login.aspx"); 肯定可以工作

【讨论】:

    【解决方案2】:

    试试这个

    Response.Redirect(this.ResolveClientUrl("~/Account/Login.aspx");
    

    【讨论】:

      【解决方案3】:

      您的问题是您正在从 MasterPage 进行重定向,并使用相对路径。

      当您使用相对路径时,它将相对于绑定到母版页的内容页面的位置,相对于母版页的位置。

      您的重定向到:

      /BuzzEnhance/Account/Account/Login.aspx
      

      几乎可以肯定是来自绑定到您的母版页的帐户文件夹中的内容页面。例如,如果您的登录页面 (/BuzzEnhance/Account/Login.aspx) 本身绑定到该母版页,它将重定向到相对路径 Account/Login.aspx,该路径将解析为 /BuzzEnhance/Account/Account/Login.aspx,这正是您所看到的.

      最好的解决方案是@abatishchev 的答案 - 使用相对于应用程序根目录~/Account/Login.aspx 的路径。

      但是,如果我怀疑您的 Login.aspx 页面绑定到同一个母版页,这会给您带来另一个问题。每次访问 Login.aspx 时,它都会执行母版页中的重定向代码,从而导致无限循环,直到超时。

      一种解决方案是避免将 Login.aspx 页面绑定到该母版页,或者添加一些条件代码,这样您就不会在 Login.aspx 页面上进行重定向。

      虽然更好,但如果您使用表单身份验证并让它以标准方式管理到登录页面的重定向,则根本不需要进行重定向。如果要显示用户名,可以使用 HttpContext.Current.User.Identity.Name - 或使用 ASP.NET 登录控件之一:LoginStatusLoginName、...

      【讨论】:

        【解决方案4】:
        "~/Account/Login.aspx"
        

        会给

        "<app root>/Account/Login.aspx"
        

        所以如果你的应用的根目录是

        http://localhost/BuzzEnhance
        

        给定的相对路径将扩展为

        http://localhost/BuzzEnhance/Account/Login.aspx
        

        此外,如果您使用表单身份验证,您可能需要使用

        FormsAuthentication.RedirectToLoginPage();
        

        MSDN

        【讨论】:

        • @ShadowWizard 它仍然是 HTTP 错误 400 - 错误请求。
        • @user614946:请注意,我删除了不重要的端口号。
        • @user614946: url http://&lt;any&gt;/BuzzEnhance/Account/Login.aspx 真的存在吗?
        • @user614946 - “...它说加载页面有问题。”可能是因为 Login.aspx 绑定到母版页,并且它正在循环 - 请参阅我的答案。
        • @user614946:是的,它确实如此:将相对网络路径转换为物理路径,因此您可以检查它是否真的存在,等等。是吗?
        【解决方案5】:

        你需要的是这个:

        Response.Redirect("/Account/Login.aspx");
        

        这将转到位于根目录内的Account,然后转到Login.aspx 页面。

        【讨论】:

        【解决方案6】:

        首先不是responce.redirect("page.aspx");

        它的Response.Redirect("Page.aspx");

        尝试这种方式它会起作用。根据您的问题,请立即尝试Response.Redirect("folder/page.aspx");,我将等待。

        记住在 C# 中第一个字母应该大写。

        【讨论】:

        • 问题是带有代码的页面已经在不同的子文件夹中,称为“BuzzEnhance”,因此相对路径是相对于该位置的。
        • @ShadowWizard 那么现在我该怎么办??
        • @user614946:请发布整个应用程序文件夹结构。
        • BuzzEnhance\Account\Login.aspx .. 我测试了当我把它放在根目录中并且只调用 response.redirect("login.aspx");页面被称为..但是当放置在根文件夹中的帐户文件夹中时,它会给出错误@abatishchev
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-05-03
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-07-23
        相关资源
        最近更新 更多