2015-05-28 2 views
0

Я использую проверку подлинности на моем сайте. Я видел в каком-то примере кода, который можно назвать .SignOut(), а затем использоватьFormsAuthentication.RedirectToLoginPage() vs RedirectToAction («Login», «Account»)

FormsAuthentication.RedirectToLoginPage() 

отправить пользователя на страницу входа в систему.

Какие преимущества, если таковые имеются, это имеет более вызывая

RedirectToAction("Login", "Account"); 

в MVC веб-сайт? Из MSDN кажется, что первый не будет вызывать HttpResponse.End(), что означает, что следующий код будет выполняться ... Я не уверен, когда мне нужно будет использовать эту функцию.

ответ

3

FormsAuthentication.RedirectToLoginPage() имеет некоторое преимущество, если он попытается добавить ?ReturnUrl={url} к URL-адресу страницы входа, который может быть использован позже, чтобы вернуть пользователя на страницу, которую они запрашивали при переадресации имени пользователя. Использование этого метода использует Response.Redirect(), что противоречит менталитету MVC. Вы проиграете на таких мероприятиях, как OnActionExecuting, от обстрела в вашем контроллере/фильтрах. source code of RedirectToLoginPage

RedirectToAction("Login", "Account"); не имеет функцию ReturnUrl из коробки, но это не держать все в экосистеме MVC так пожара событий. В случае, если вы запустили кого-то и перенаправили обратно на страницу входа, я бы, вероятно, сохранил все это в MVC и использовал RedirectToAction. Или потенциально используйте Redirect(FormsAuthentication.Url);, если вы всегда хотите использовать URL-адрес страницы входа в web.config.

+0

Я сожалею, что я так долго, чтобы принять этот ответ! – VictorySaber

0

Сделайте SignOut(), но затем верните HttpUnauthorizedResult так, чтобы контроллер просто использовал регулярную переадресацию для входа в систему.

Если вы подписываете в вашем OnActionExecuting случае контроллера, сделать это таким образом ...

protected override void OnActionExecuting(ActionExecutingContext filterContext) { 
    if (//I need to log out...) { 
     System.Web.Security.FormsAuthentication.SignOut(); 
     filterContext.Result=new System.Web.Mvc.HttpUnauthorizedResult(); 
     return; 
    } 

    base.OnActionExecuting(filterContext); 
} 
Смежные вопросы