我有一個非常簡單的要求。ASP.NET MVC在登錄/註銷時更改默認路由
如果用戶轉到http://www.somedomain.com/並且未記錄,我希望MVC將用戶路由到HomeController。
如果用戶轉到http://www.somedomain.com/並且已登錄,我希望MVC將用戶路由到ClientController。
有沒有這個問題的簡單解決方案?
非常感謝!
我有一個非常簡單的要求。ASP.NET MVC在登錄/註銷時更改默認路由
如果用戶轉到http://www.somedomain.com/並且未記錄,我希望MVC將用戶路由到HomeController。
如果用戶轉到http://www.somedomain.com/並且已登錄,我希望MVC將用戶路由到ClientController。
有沒有這個問題的簡單解決方案?
非常感謝!
在你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");
}
}
}
有相當多的解決這個問題的方法。
根據您的要求,您可以爲此實現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。
由於此解決方案的URL已更改,如果URL保持不變,那就太好了 – 2010-12-21 12:12:15
第二個請求讓URL不變 – Phil 2011-07-21 11:37:09