MVC3 Auth returnURL

时间:2011-08-10 18:05:39

标签: .net asp.net-mvc

我在MVC3中使用Forms身份验证。出于某种原因,returnUrl似乎正在复制网址的一部分。例如:

http://localhost/customer/?filter=1&sort=3

变为:

RETURNURL = /本地主机/客户/过滤器= 1&安培;排序= 3及过滤器= 1&安培;排序= 3

正如您所看到的,由于某种原因,其他参数正在重复。有人知道修复吗?

2 个答案:

答案 0 :(得分:0)

returnUrl通过系统时,值得观察?returnUrl=。在某些时候,有些事情是在最后添加第二组参数。可能是这些参数被添加到当前URL的末尾,当前URL中已经有returnUrl参数?如果是这种情况,可能值得确保编码Url.Encode(returnUrl)。例如{{1}}在坚持到底之前。{/ p>

答案 1 :(得分:0)

为了使其正常工作,您必须执行以下操作:

  1. 想象一下,这是一个用户必须登录的事件页面
  2. In order to subscribe for the event you have to < a style=" background-color:Black; color:White; font-weight:bold;" href="@Url.Content("~/Account/Login?returnUrl=/Events/Index")">Login< /a> or create a New Account.

    1. public ActionResult Login(LogOnModel model,string returnUrl) {   if(ModelState.IsValid)   {     if(Membership.ValidateUser(model.UserName,model.Password))     {        MembershipUser user = Membership.GetUser(model.UserName);

         FormsAuthentication.SetAuthCookie(model.UserName, model.RememberMe);
      
         if (Url.IsLocalUrl(returnUrl) && returnUrl.Length > 1 && returnUrl.StartsWith("/")
          && !returnUrl.StartsWith("//") && !returnUrl.StartsWith("/\\"))
        {
                      return Redirect(returnUrl);
        }
        else
        {
           return RedirectToAction("Index", "Account");
        }
              }
              else
              {
                  ModelState.AddModelError("", "The user name or password provided is incorrect.");
              }
          }
      
          return View(model);
      

      }