【问题标题】:Its Possible to connect multiple requirements to one requirementHandler?可以将多个需求连接到一个需求处理程序吗?
【发布时间】:2021-09-01 09:03:31
【问题描述】:

我尝试将多个需求连接到一个需求处理程序,因为我不想多次编写相同的代码。在第一个需求中,我使用了许多需求处理程序。在第二个需求中,我想使用具有相同逻辑的需求处理程序。我必须使用相同的代码和新的泛型类型创建新的处理程序吗?固体是正确的吗?

【问题讨论】:

    标签: c# .net asp.net-core


    【解决方案1】:

    如果您实现IAuthorizationHandler 而不是从AuthorizationHandler<TRequirement> 继承,则可以处理多个需求。 由于您不能从多个类继承,因此实现接口似乎是合乎逻辑的方式。

    您需要实现HandleAsync 并检查那里的要求是否是处理程序支持的要求之一。 如果是,请按照您的逻辑运行它。 你可以看到AuthorizationHandler<TRequirement> 做了什么:https://github.com/dotnet/aspnetcore/blob/77599445aabd7bf357feb5cf8dfec7187148f1af/src/Security/Authorization/Core/src/AuthorizationHandler.cs。 作为参考,这是它如何过滤到您指定的需求类型:

    public virtual async Task HandleAsync(AuthorizationHandlerContext context)
    {
        foreach (var req in context.Requirements.OfType<TRequirement>())
        {
            await HandleRequirementAsync(context, req);
        }
    }
    

    【讨论】:

    • 是的,但是如何将资源传递给 startUp 类。因为那里必须声明 services.addScoped> 。但是如何将 TResouces 发送到这个处理程序?
    猜你喜欢
    • 2023-03-27
    • 1970-01-01
    • 1970-01-01
    • 2010-12-02
    • 2018-04-04
    • 2017-06-05
    • 1970-01-01
    • 2012-03-18
    • 1970-01-01
    相关资源
    最近更新 更多