2010-11-15 121 views

回答

3

在你HomeController中,指數的動作,重定向到ClientController如果HttpContext.User中不爲空:

public class HomeController : Controller 
{ 

    public ActionResult Index() 
    { 
     if (HttpContext.User != null) 
     { 
      RedirectToAction("Index", "Client"); 
     } 
    } 

} 

編輯:或使用Request.IsAuthenticated

public class HomeController : Controller 
{ 

    public ActionResult Index() 
    { 
     if (Request.IsAuthenticated) 
     { 
      RedirectToAction("Index", "Client"); 
     } 
    } 

} 
+0

由於此解決方案的URL已更改,如果URL保持不變,那就太好了 – 2010-12-21 12:12:15

+0

第二個請求讓URL不變 – Phil 2011-07-21 11:37:09

1

有相當多的解決這個問題的方法。

根據您的要求,您可以爲此實現IAuthorizationFilter並實現OnAuthorization方法。

public void OnAuthorization(AuthorizationContext filterContext) 
    { 
     IUser user = _currentUserProvider.CurrentUser; 
     if (user != null) 
     { 
      // you can perform perform additional user-authorization here...   
      if(_authorizationService.IsAuthorized(user)) 
      { 
       //user is authorized 
       return; 
      } 
      else 
      {  
       HandleUnAuthorizedRequest(filterContext); 
       return; 
      } 
     } 

     //user is not authenticated (not logged in) 
     HandleUnAuthenticatedRequest(filterContext); 
    } 

然後,您在控制器方法或控制器類上使用actionFilter。有關動作過濾器的更多信息,請參閱http://msdn.microsoft.com/en-us/library/dd410209(v=VS.90).aspx

現在,如果你希望所有未認證的請求去ClientController,你可以在你HttpApplication(通常的global.asax.cs)類處理AuthenticateRequest事件和執行類似上面的actionFilter。