ASP.NET MVC2处理控制器的UnauthorizedAccessException

时间:2011-04-28 20:23:51

标签: c# asp.net asp.net-mvc-2

我需要使用更复杂的授权,所以当用户没有操作权限时,我创建了可以抛出UnauthorizedAccessException的类。但是我应该如何正确处理这个异常呢?抛出此异常时我需要重定向到登录页面,所以我想我不能使用控制器的OnException方法。作为临时解决方案,我使用它:

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

它似乎可行,但我不确定它是否是正确的解决方案。

感谢您的提示。

2 个答案:

答案 0 :(得分:0)

只需使用[Authorize]属性修饰控制器操作,或在控制器操作中将响应状态代码设置为401。 ASP.NET框架将自动将您重定向到登录页面。

答案 1 :(得分:0)

您还可以使用HandleErrorAttribute的覆盖来对控制器的未处理异常执行自定义逻辑。

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

你的控制器:

[MyError]
public class SampleController : Controller { }