2010-01-29 1 views
0

Я использую ASP.NET MVC, на мой логин действия я делаю:Не могу объяснить, почему не перенаправление после авторизации с помощью RedirectFromLogin

[AcceptVerbs("POST")] 
public ActionResult Login(FormCollection form) 
{ 
    User validatedUser = // tests username/pwd here. 

    FormsAuthentication.RedirectFromLoginPage(
     validatedUser.ID.ToString(), rememberMe); 

    if(String.IsNullOrEmpty(Request["ReturnUrl"])) 
     string redirectUrl = Request["ReturnUrl"]; 

    if (!String.IsNullOrEmpty(Request.QueryString["ReturnUrl"])) 
     string redirectUrl = Request["ReturnUrl"]; 
} 

Мой URL выглядит следующим образом, когда я нахожусь на странице входа в систему:

http://localhost:56112/user/login?ReturnUrl=/admin/settings 

Неверное изображение здесь?

Мой web.config:

<authentication mode="Forms"> 
    <forms loginUrl="/user/login" 
     protection="All" 
     timeout="30" 
     name="SomeCookie" 
     requireSSL="false" 
     slidingExpiration="true" 
     defaultUrl="default.aspx" /> 

ответ

6

Я рекомендовал бы вам не использовать RedirectFromLoginPage метод в приложении MVC. Было бы лучше выполнить перенаправления с использованием стандартных методов ASP.NET MVC. Вы можете использовать метод SetAuthCookie:

public ActionResult Login(FormCollection form) 
{ 
    // ... 
    FormsAuthentication.SetAuthCookie(validatedUser.ID.ToString(), rememberMe); 
    // ... 
    return Redirect(FormsAuthentication.DefaultUrl); // will read default url from web.config 
} 
+0

Почему вы предлагаете против этого? (curiuos) – Blankman

+0

Поскольку рекомендуемый способ выполнить перенаправление в приложении ASP.NET MVC - это вернуть правильный ActionResult из действия. 'RedirectFromLoginPage' близок к невозможности модульного теста. –

+0

Вышеупомянутое решение работает, но зачем даже вызывать FormsAuthentication.DefaultUrl. Почему бы просто не перенаправить контроллер и действия прямо из вашего кода. «RedirectToAction» - лучшее решение. –

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