2011-04-28 53 views
0

我需要使用更復雜的授權,所以我創建了類,當用戶沒有操作權限時,可以拋出UnauthorizedAccessException。但是,我應該如何正確處理這個異常呢?當這個異常被拋出時,我需要重定向到登錄頁面,所以我認爲我不能使用控制器的OnException方法。作爲臨時解決方案,我用這個:ASP.NET MVC2句柄控制器的UnauthorizedAccessException

public abstract class MyController : Controller 
{  
    protected override void ExecuteCore() 
    { 
     try 
     { 
      base.ExecuteCore(); 
     } 
     catch (UnauthorizedAccessException) 
     { 
      HttpContext.Response.StatusCode = 401; 
     } 
    } 
} 

看來它可以工作,但我不知道它是否是適當的解決方案。

感謝您的提示。

回答

0

您也可以使用覆蓋HandleErrorAttribute來對控制器未處理的異常執行自定義邏輯。

public class MyErrorAttribute : HandleErrorAttribute 
{ 
    public override void OnException(ExceptionContext filterContext) 
    { 
     // Do Whatever 
    } 
} 

而且你的控制器:

[MyError] 
public class SampleController : Controller { } 
+0

是否可以將此屬性隱式添加到所有控制器? Becouse我需要這個處理程序全局工作。 – 2011-04-28 20:49:07

+0

您可以將其添加到其他控制器繼承的基礎控制器。我在我的項目中這樣做。 – Tejs 2011-04-28 20:49:52

+0

謝謝。使用此代碼的屬性:filterContext.Result = new HttpUnauthorizedResult();這對我來說似乎是最好的。 – 2011-04-30 15:44:58

0

只需使用[Authorize]屬性修飾您的控制器操作,或者在控制器操作中將響應狀態代碼設置爲401。 ASP.NET框架將完成這項工作來自動將您重定向到登錄頁面。

+0

我想允許用戶編輯自己的文章,所以痘痘位更復雜的邏輯,現在我使用的λexpresion決定是否就是可以做的動作。屬性不具備這種可能性。 – 2011-04-28 20:46:30