为了账号安全,请及时绑定邮箱和手机立即绑定

覆盖ASP.NET MVC中的授权属性

/ 猿问

覆盖ASP.NET MVC中的授权属性

慕运维1137616 2019-08-27 10:18:26

覆盖ASP.NET MVC中的授权属性

我有一个MVC控制器基类,我在其上应用了Authorize属性,因为我希望几乎所有控制器(及其操作)都被授权。

但是我需要一个控制器和另一个控制器的动作未经授权。我希望能够用[Authorize(false)]或其他东西来装饰它们,但这是不可用的。

有任何想法吗?


查看完整描述

3 回答

?
慕雪6442864

编辑:自ASP.NET MVC 4以来,最好的方法就是使用内置的AllowAnonymous属性。

下面的答案是指早期版本的ASP.NET MVC

您可以使用可选的bool参数创建从标准AuthorizeAttribute继承的自定义授权属性,以指定是否需要授权。

public class OptionalAuthorizeAttribute : AuthorizeAttribute{
    private readonly bool _authorize;

    public OptionalAuthorizeAttribute()
    {
        _authorize = true;
    }

    public OptionalAuthorizeAttribute(bool authorize)
    {
        _authorize = authorize;
    }

    protected override bool AuthorizeCore(HttpContextBase httpContext)
    {
        if(!_authorize)
            return true;

                    return base.AuthorizeCore(httpContext);
    }}

然后,您可以使用该属性修饰基本控制器:

[OptionalAuthorize]public class ControllerBase : Controller{}

对于任何你不想要授权的控制器,只需使用带有'false'的覆盖 - 例如

[OptionalAuthorize(false)]public class TestController : ControllerBase{
    public ActionResult Index()
    {
        return View();
    }}


查看完整回答
反对 回复 2019-08-27
?
莫回无

我个人对此的看法是拆分控制器。只需创建另一个控制器对于您不需要身份验证的操作。

或者你可以:

  • BaseController
    不需要身份验证 - 在这里你有你所有的“基础东西”:)。

  • BaseAuthController : BaseController
    此处的所有操作都需要验证

这样,您可以在需要时进行身份验证,只需从特定类派生即可。


查看完整回答
反对 回复 2019-08-27
  • 3 回答
  • 0 关注
  • 286 浏览
我要回答
慕课专栏
更多

添加回答

回复

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信