MVC3:Session_Start在测试角色时触发两次

时间:2014-03-21 02:38:26

标签: asp.net-mvc asp.net-mvc-3 model-view-controller

我需要为使用MVC3的Web应用程序进行一些身份验证。客户希望有一个通用页面来显示他们是否在Windows AD中没有允许使用该应用程序的任何角色组。我发现了一种非常简单的方法,但只是好奇它是否是一种有效的方式,或者是否有更好的东西。

基本上在全局的Session_Start中我正在检查User.IsInRole(),如果返回false,那么我做一个Response.Redirect()。这个问题是:在它之后是IF语句中的代码并点击Response.Redirect()代码然后它再次点击会话,然后再进入应用程序根目录中的AccessDenied页面。这个可以吗?它是否会导致任何问题如果它们有效并且没有输入If来执行response.redirect?

        //if (!User.IsInRole("test_user"))
        //{
        //    Response.Redirect("~/AccessDenied.aspx", true);
        //}

1 个答案:

答案 0 :(得分:0)

我建议你为MVC3编写你的授权过滤器并在那里做这种逻辑:

public class RoleFilter: AuthorizeAttribute
{     
    public override void OnAuthorization(System.Web.Http.Controllers.HttpActionContext filterContext)
    {
        if (!User.IsInRole("test_user"))
        {
            filterContext.HttpContext.Response.StatusCode = 302;
            filterContext.Result = new RedirectResult("~/AcessDenied.aspx");
        }
    }
}

此外,我不建议您使用Response.Redirect,因为它会中止当前线程。