重定向URL无效

时间:2015-06-26 16:51:50

标签: c# asp.net

我想在访问所有网页之前添加授权。所以我在web.config中使用了以下配置

<authentication mode="Forms">
   <forms loginUrl="~/Login/Login.aspx" />
</authentication>
<authorization>
   <deny users="?"/>
</authorization>

此后每个页面登录Login.aspx询问,但登录成功后,重定向无法使用以下代码。

//http://localhost:55217/Login/Login.aspx?ReturnUrl=%2fHome%2fdeleteUser.aspx

if (returnMsg == "Success") {
    string query0 = Request.QueryString[0];
    finalStr = "~" + query0;
    Response.Redirect(finalStr, false);

    //Session["Login"] = username;
    //Response.Redirect("~/Home/Home.aspx");
    //Response.Redirect("/Home/HomeTest.aspx");
} else {
    StatusLabel.Attributes["style"] = "color:red; font-weight:bold;";
    StatusLabel.Text = "Error: Username or Password Wrong";
}

它再次停留在登录页面上,要求提供凭据。但未显示错误"Error: Username or Password Wrong"

为什么它不起作用的任何想法?

1 个答案:

答案 0 :(得分:1)

如果您使用的是表单身份验证,则需要在身份验证成功时创建身份验证Cookie。否则,ASP.NET子系统将不知道身份验证是否成功。

看到这篇文章: https://support.microsoft.com/en-us/kb/301240

以下是本文的相关文字:

4.您可以使用以下两种方法之一生成表单身份验证Cookie,并将用户重定向到cmdLogin_ServerClick事件中的相应页面。为两种方案提供了示例代码。根据您的要求使用其中任何一种。

•调用RedirectFromLoginPage方法自动生成表单身份验证cookie,并将用户重定向到cmdLogin_ServerClick事件中的相应页面:

private void cmdLogin_ServerClick(object sender, System.EventArgs e)
{
if (ValidateUser(txtUserName.Value,txtUserPass.Value) )
    FormsAuthentication.RedirectFromLoginPage(txtUserName.Value,
        chkPersistCookie.Checked);
    else
        Response.Redirect("logon.aspx", true);
}

•生成身份验证票证,对其进行加密,创建cookie,将其添加到响应中,然后重定向用户。这使您可以更好地控制创建cookie的方式。在这种情况下,您还可以包含自定义数据以及FormsAuthenticationTicket。

private void cmdLogin_ServerClick(object sender, System.EventArgs e)
{
   if (ValidateUser(txtUserName.Value,txtUserPass.Value) )
   {
      FormsAuthenticationTicket tkt;
      string cookiestr;
      HttpCookie ck;
      tkt = new FormsAuthenticationTicket(1, txtUserName.Value, DateTime.Now, 
DateTime.Now.AddMinutes(30), chkPersistCookie.Checked, "your custom data");
      cookiestr = FormsAuthentication.Encrypt(tkt);
      ck = new HttpCookie(FormsAuthentication.FormsCookieName, cookiestr);
      if (chkPersistCookie.Checked)
      ck.Expires=tkt.Expiration;    
            ck.Path = FormsAuthentication.FormsCookiePath; 
      Response.Cookies.Add(ck);

      string strRedirect;
      strRedirect = Request["ReturnUrl"];
      if (strRedirect==null)
            strRedirect = "default.aspx";
         Response.Redirect(strRedirect, true);
   }
   else
      Response.Redirect("logon.aspx", true);
}