我试图仅使用.Net MVC 4拒绝一个区域而我没有得到结果。当我将<authentication mode="Forms" />
放入web.config时,一切都被拒绝:所有网站都不是我想要的,我只想拒绝管理区域。
我将AuthorizeAttribute
放入我的管理区域的BaseController
,仍然无效:
public class AutenticarAdminAttribute : AuthorizeAttribute
{
public override void OnAuthorization(AuthorizationContext filterContext)
{
base.OnAuthorization(filterContext);
if (!filterContext.HttpContext.User.Identity.IsAuthenticated)
{
filterContext.Result = new RedirectResult("~/admin/login");
}
}
}
Global.asax:filters.Add(new AutenticarAdminAttribute());
如果我从web.config中删除<authentication mode="Forms" />
,则AuthorizeAttribute
无法完成工作,IsAuthenticated
始终为真。
当我再次将<authentication mode="Forms" />
放入web.config时,一切都被拒绝了。
我不能只限制一个区域,怎么办?
管理区域中的BaseController:
[AutenticarAdmin]
public class BaseController : Controller
{
public BaseController()
{
}
}
管理区域中的DefaultAdminController:
public class DefaultController : BaseController
{
public ActionResult Index()
{
return View();
}
}
公共控制人:
public class DefaultController : Controller
{
public ActionResult Index()
{
return View();
}
}
答案 0 :(得分:0)
您正在重写OnAuthorization方法并在内部检查用户是否为IsAuthenticated。
授权和身份验证是两回事!
关于身份验证,您可以在.config文件中设置默认重定向URL和登录URL(在身份验证标记中)。
希望有所帮助。
答案 1 :(得分:0)
从global.asax中删除filters.Add(new AutenticarAdminAttribute());
。注册全局过滤器与将属性放在应用程序的所有控制器中相同。