2012-02-21 2 views
1

Я следующая иерархию наследования в моем ASP.net MVC 3 приложения:ASP.Net MVC 3 Контроллер Наследование

public class HomeController : AuthenticatedBaseController 
{ 

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


public class AuthenticatedBaseController : BaseController 
{ 
    public AuthenticatedBaseController() 
    { 
     if (!this.UserToken.IsAuthenticated) 
     { 
      RedirectToAction("Login", "Login"); 
     } 
    } 

} 

public class BaseController : Controller 
{ 

    private Token _token; 
    public Token UserToken 
    { 
     get 
     { 
      _token = (Token)(Session["token"]); 
      if (_token == null) 
      { 
       SetToken(); 
      } 
      return _token; 
     } 
    } 

    public void SetToken() 
    { 
     _token = new Token(Session.SessionID, Request.Url.Host, Request.Url.ToString()); 
     Session["token"] = _token; 
    } 
} 

Я нахожу, что конструктор AuthenticatedBaseController дважды стрелял, когда я делаю запрос GET домой. Может кто-нибудь помочь мне сказать, что я делаю неправильно?

+0

Хорошей отправной точкой является использование Fiddler, чтобы исключить, что браузер фактически не отправляет два запроса GET. –

+0

Вы должны использовать фильтры авторизации Authorize. – bevacqua

+0

Это очень небезопасный способ аутентификации. Гораздо проще захватить куки-файл сеанса, чем файл cookie авторизации. Вы должны использовать AuthorizeAttribute и использовать класс FormsAuthentication для генерации билетов на аутентификацию. Или, реализуйте свою собственную службу на основе IIdentity и используйте ее. –

ответ

1

Чтобы ответить на ваш вопрос, он дважды срабатывает, потому что вы перенаправляете пользователя на другое действие, которое вызывает другой запрос, который вызывает создание другого экземпляра контроллера.

+0

Контроллер, на который точки перенаправления не наследует AuthenticatedBaseController. – klork

+1

@klork - при дальнейшем анализе ваш код не может даже работать. RedirectToAction не является командой. Вы должны ВОЗВРАТИТЬ перенаправление на действие из метода действий. Вы не можете просто называть это, он ничего не сделает. –

+0

Да, это была проблема. благодаря – klork

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