2012-05-06 4 views
0

После входа в систему пользователь не возвращается на запрошенный URL.asp.net mvc 3 razor login view не возвращает запрошенный url

Это контроллер:

public ActionResult LogIn() 
    { 
     return View(); 
    } 

    [HttpPost] 
    public ActionResult LogIn(LoginModel model, string returnUrl) 
    { 
     if (ModelState.IsValid) 
     { 
      if (UserIsValid(model.Username, model.Password)) 
      { 
       if (model.RememberMe == false) 
       { 

       } 
       else 
       { 
        FormsAuthenticationTicket ticket = new FormsAuthenticationTicket(1, 
         model.Username, 
         DateTime.Now, 
         DateTime.Now.AddDays(15), 
         false, 
         "user", 
         FormsAuthentication.FormsCookiePath); 

        string HashedCoockies = FormsAuthentication.Encrypt(ticket); 
        HttpCookie cookie = new HttpCookie(FormsAuthentication.FormsCookieName, HashedCoockies); 
        Response.Cookies.Add(cookie); 

        if (Url.IsLocalUrl(returnUrl) && returnUrl.Length > 1 && returnUrl.StartsWith("/") 
          && !returnUrl.StartsWith("//") && !returnUrl.StartsWith("/\\")) 
        { 
         return Redirect(returnUrl); 
        } 
        else 
        { 
         return RedirectToAction("Index", "Home"); 
        } 
       } 
      } 
      else 
      { 
       ModelState.AddModelError("", "The user name or password is incorrect."); 
      } 
     } 

     return View(model); 
    } 

вид:

@using (Html.BeginForm()) 
{ 
       <label for="username"> 
        Username:</label> 
       <br /> 
       @Html.TextBoxFor(model => model.Username) 
       <br /> 
       <br /> 
       <label for="password"> 
        Password:</label> 
       <p> 
        <a href="#">Forgot your password?</a></p> 
       @Html.PasswordFor(model => model.Password) 
       <br /> 
       <br /> 
       <div id="lower"> 
        <br /> 
        <br /> 
        @Html.CheckBoxFor(model => model.RememberMe, new { style = "margin-left: 10px; margin-top: 7px; position: absolute;" }) 
        <label for="check" id="keep" style="margin-left: 30px; margin-top: -14px;"> 
         Keep me logged in</label> 
        <input type="submit" value="Login" class="round-button" style="float: right; margin-right: 20px;" /> 
       </div> 
} 

и web.config

<authentication mode="Forms"> 
    <forms loginUrl="~/account/login" timeout="2880" /> 
</authentication> 

р .с. у моего login.cshtml нет _Layout.html

+0

Что такое «мнение Логин не вернувшихся на запрошенный URL» означает? Вы остаетесь на странице входа? Что такое URL в браузере после входа в систему? Вы поставили точку останова на строке 'return Redirect (returnUrl);'? Является ли это ударом, а 'returnUrl' содержит правильное значение? – nemesv

+0

Теперь returnUrl всегда равно нулю. –

ответ

1

returnUrl может быть пустым. ReturnUrl будет иметь значение, когда URL в этом формате

http://localhost:56457/Account/LogIn?returnUrl=whatever_return_url

при попытке получить доступ к whatever_return_url (который требует авторизации перед доступом) было бы перенаправить вас на страницу входа в систему с добавил ReturnUrl (означающего вы не вошли в систему ранее)

, что означает, что если ваш логин прошел успешно, он должен принять вас whatever_return_url. Если returnUrl не указан (то есть: если returnUrl равно null), он должен перейти к действию «Index» контроллера «Home» после входа в систему.

http://localhost:56457/Home/Index

тщательно проверить контроллер, имена действия и действительность URL-

Смежные вопросы