2011-04-28 51 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