gpt4 book ai didi

c# - 可以内联而不是使用属性运行策略的所有处理程序吗?

转载 作者:行者123 更新时间:2023-12-03 17:38:49 26 4
gpt4 key购买 nike

在我的大多数 API 上,我只是像这样进行授权:

[Authorize(Policy = "Foo")]
public MyApi()

我从 NuGet 获得了这个政策,但无法修改它。

对于我的一些 API,我并不总是想要这个策略。这需要根据一些配置在运行时弄清楚。我想要某种方式来运行它,并确保所有设置的处理程序都运行。

经过大量搜索,我发现我创建了一个 IAuthorizationService ,并用它来调用 AuthorizeAsync .这似乎是我想要的,但我现在遇到的问题是所有处理程序都依赖于 AuthorizationFilterContext作为上下文的资源。当通过属性完成授权时,这似乎会自动发生,而不是通过对 AuthorizeAsync 的调用。在这种情况下需要手动传入。我的代码现在看起来像这样:
public MyApi()
{
var allowed = await _authorizationService.AuthorizeAsync(User, null, "Foo").ConfigureAwait(false);
}

这似乎正确地通过了我所有的处理程序,但由于缺少 AuthorizationFilterContext,它们不起作用。 .

1)这是开始时的正确方法,还是有其他方法可以在线执行此操作?我猜可能有某种方法可以创建我自己的策略来包装这个策略,我可以在那里检查配置,但是如果有一种简单的内联方法,我更喜欢这种方法。

2)如果这种方式有效,有没有什么好办法可以得到 AuthorizationFilterContext ?我试过手动创建它,但是如果不从上下文中传递更多数据,恐怕这实际上并不正确,但是我找不到任何好的示例/文档:
new AuthorizationFilterContext(new ActionContext(HttpContext, HttpContext.GetRouteData(), new ActionDescriptor()), new IFilterMetadata[] { });

最佳答案

不会有AuthorizationFilterContext当您在授权管道之外时。因此,您不应使用 IAuthorizationService 处理内联身份验证。 .

This seems to go through all my handlers correctly, but they don't work due to missing the AuthorizationFilterContext.



听起来您可以控制身份验证处理程序。如果不需要,您是否尝试过在处理程序内部进行短路验证?

处理程序可以通过 DI 获取服务,因此您可以通过 IOptions 或 IHttpContextAccessor 放置所需的运行时配置等等。

关于c# - 可以内联而不是使用属性运行策略的所有处理程序吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60194350/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com