我需要为使用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);
//}
答案 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
,因为它会中止当前线程。