我的控制器都擴展了一個基本的UserAwareController類,它公開了GetCurrentUser()方法。如果用戶尚未登錄,我希望對此方法的任何調用重定向到登錄頁面。如何通過從Asp.NET控制器拋出異常來重定向?
我可以通過從此方法拋出一些異常來實現此目的嗎?如何在拋出此異常時導致重定向發生?
我的控制器都擴展了一個基本的UserAwareController類,它公開了GetCurrentUser()方法。如果用戶尚未登錄,我希望對此方法的任何調用重定向到登錄頁面。如何通過從Asp.NET控制器拋出異常來重定向?
我可以通過從此方法拋出一些異常來實現此目的嗎?如何在拋出此異常時導致重定向發生?
雖然我認爲你應該改變方法有關授權解決方案,你可以和它呆在一起,並使用此代碼:
public partial class BaseUserAwareController : Controller
{
protected override void OnAuthorization(AuthorizationContext filterContext)
{
if (GetCurrentUser() == null)
{
filterContext.Result = new HttpUnauthorizedResult();
}
}
}
如果你的項目是不是太大了,想想將其更改爲使用[Authorize]
。如果你使用它,那也只能是:
[Authorize]
public partial class UserAwareController : Controller
{
}
你可能會認爲這不是很大的區別,但也[Authorize]
處理一些緩存問題(返回緩存的響應,當你不再被授權)。
安裝MVC 2並創建新的MVC 2 Web應用程序。它包含授權邏輯,您可以在應用程序中使用它們。
您能否指示我解釋授權以及如何正確使用授權關鍵字的鏈接?我不明白我如何將它綁定到我的身份驗證方案(我使用開放標識)。 – ripper234 2010-04-27 17:13:49
@ ripper234:這裏是一篇關於FormsAuthentication的文章,以及您使用[Authorize]屬性必須做的事情:http://blog.codevelop.dk/post/2007/11/24/ASPNET-20-Forms-authentication-Keeping -it-customized-yet-simple.aspx你可以修改它來使用OpenId。 – LukLed 2010-04-27 17:33:05
我嘗試使用授權,它看起來很有希望,除非我遇到了這個問題:http:// stackoverflow。com/questions/2724271/using -a-colon-in-return-url-with-forms-authentication-the-return-url-specif – ripper234 2010-04-27 19:45:09
爲什麼不直接使用Redirect
或RedirectToAction
方法來重定向到登錄頁面:
public ActionResult GetCurrentUser()
{
if (user is not logged in)
{
Redirect("/LoginPage");
}
}
編輯:還是做檢查的基本控制器OnActionExecuting:
public class BaseController : Controller
{
protected override void OnActionExecuting(ActionExecutingContext filterContext)
{
if (GetCurrentUser() == null)
{
(filterContext.Controller as BaseController).Redirect("/Login");
}
base.OnActionExecuting(filterContext);
}
}
http://forums.asp.net/t/1239842.aspx也是這個話題的一個很好的參考。
在您的基本控制器中,重寫OnActionExecuting。這使您可以訪問ActionExecutingContext,其中包含HttpContext和響應。
然後,您可以根據您希望像這樣的任何邏輯將用戶重定向:
<ActionContext>.HttpContext.Response.Redirect(<Your Url>)
我忘記了上下文變量副手的名字,但它是在方法簽名。
你爲什麼不使用'Authorize'屬性?爲什麼你想重塑一些東西,這是非常好的。 – LukLed 2010-04-27 16:55:19
@LukLed - 嗯,我不熟悉Authorize屬性,但是從我收集的內容來看,它並不是我想要的。每個用戶都可以訪問這個動作,他只需要登錄...所以我想將他重定向到登錄頁面。或者我錯過了Authorize如何工作? – ripper234 2010-04-27 17:01:34
在大多數情況下,它的工作原理與您所說的完全相同。如果用戶未登錄,他將被重定向到登錄頁面。 – LukLed 2010-04-27 17:03:50