【问题标题】:Should I call base.OnAuthorization(filterContext)?我应该调用 base.OnAuthorization(filterContext) 吗?
【发布时间】:2015-09-10 18:31:59
【问题描述】:

我有一个自定义的AuthorizeAttribute,如下所示:

public override void OnAuthorization(AuthorizationContext filterContext)
{
    if (filterContext.HttpContext.Request.IsAuthenticated)
    {
        var userInRole = CurrentUser.IsInRole(Roles);

        // Etc...
    }
}

我应该在这里打电话给base.OnAuthorization(filterContext)吗?

如果是这样,它会做什么?

【问题讨论】:

    标签: .net asp.net-mvc forms-authentication windows-authentication


    【解决方案1】:

    默认实现是开源的,可以查看here

    它检查用户是否经过身份验证,然后检查以确保在属性上指定了用户或角色。

    我想真正的问题是,当内置的AuthorizeAttribute 已经完成了你正在做的事情时,你为什么还要编写自定义的AuthorizeAttribute

    请注意,如果您确实需要自定义 AuthorizeCore 方法(而不是 OnAuthorization),那么覆盖 AuthorizeCore 方法会更简单,因为 OnAuthorization 方法具有禁用输出缓存的代码,因此在注销后无法看到缓存的视图。

    【讨论】:

    • 这只是一个学习练习,不适用于生产代码。这是硬编码用户的非常粗略的实现。关于输出缓存的要点。
    • 我错过了什么吗?我已经覆盖了AuthorizeCore 并在其中插入了一个断点,但它从未被命中。
    • AuthorizeAttribute 要求将其放置在控制器、操作方法上或注册为全局过滤器。此外,应用程序必须具有安全框架才能执行任何操作。最简单的选择是在首次创建项目时从 Visual Studio 附带的默认模板开始(或在某些版本的 Visual Studio 中为模板添加授权)。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-01-14
    • 2010-11-05
    • 2011-09-17
    • 1970-01-01
    • 2016-05-29
    • 2013-01-02
    • 2014-11-21
    相关资源
    最近更新 更多