【发布时间】:2018-01-22 12:46:47
【问题描述】:
我创建了一个自定义授权属性,但我需要一些操作来允许匿名访问。我尝试了三种不同的方法,但均未成功:使用AllowAnonymous,使用附加参数更新现有属性,并创建一个新的覆盖属性。基本上,控制器级属性似乎总是在动作级属性之前被调用。
这是控制器:
[AuthorizePublic(Sites = AuthSites.Corporate)]
public class CorporateController : SecuredController
{
[AuthorizePublic(Sites = AuthSites.Corporate, AllowAnonymous = true)]
public ActionResult Login(string returnUrl)
{
ViewBag.ReturnUrl = returnUrl;
return View();
}
}
以及属性:
public class AuthorizePublic : AuthorizeAttribute
{
public AuthSites Sites { get; set; }
public bool AllowAnonymous { get; set; }
protected override bool AuthorizeCore(HttpContextBase httpContext)
{
// Logic
}
}
作为最后的手段,我可以将登录操作移动到他们自己的控制器上,但在我这样做之前,我是否遗漏了一些东西来让这些方法中的一种工作?动作级别的属性没有覆盖控制器级别的属性,这让我有点惊讶。
【问题讨论】:
-
只是为了确认一下,Action 方法上的简单
[AllowAnonymous]在您的情况下不会覆盖 Authorization 属性? -
已确认。如果我调试,我可以看到它正在访问控制器属性并陷入重定向循环。
-
所以问题似乎不是授权,而是重定向循环 - 这不应该发生。愿意在您的问题中填写一些详细信息吗?也许向我们购买您的 AuthorizeCore 方法的代码,或者导致重定向的任何原因
-
我听到了你的理论,但我只是删除了控制器上的属性,并且操作上的自定义属性被完全忽略了。也许我需要更新我的属性实现以表明它也可以用于操作?
-
你也可以试试this回答。可能会有所帮助。
标签: asp.net-mvc