MinimalAPI 动作过滤器永远不会被执行

MinimalAPI Action filter never get executed

我正在做一个最小的 API,我正在尝试制作一个用于身份验证的 actionfilter。

我尝试像这样直接在端点注册上添加我的操作过滤器:

app.MapGet("/Users/{userId}", [ServiceFilter(typeof(CustomAuthorizationAttribute))] async (IMediator mediator, string userId) =>
    {
        //SomeCode
    });

我也直接用属性试过了

app.MapGet("/Users/{userId}", [CustomAuthorizationAttribute()] async (IMediator mediator, string userId) =>
    {
        //SomeCode
    });

起初我尝试做一个扩展以更优雅的方式添加它,但它也没有用。

public static TBuilder AddCustomAuthorizationAttribute<TBuilder>(this TBuilder builder) where TBuilder : IEndpointConventionBuilder
{
    if (builder == null)
    {
        throw new ArgumentNullException(nameof(builder));
    }
    
    builder.Add(endpointBuilder =>
    {
        endpointBuilder.Metadata.Add(new CustomAuthorizationAttribute());
    });
    return builder;
}

这是我的简单 ActionFilter。我将我的断点放在 onActionExecuting 代码下,以便在调用属性时进行拦截,但它永远不会被调用。

public class CustomAuthorizationAttribute : ActionFilterAttribute, IAsyncActionFilter
{
   public override void OnActionExecuting(ActionExecutingContext context)
   {
        base.OnActionExecuting(context); //BreakPoint
   }

   public override Task OnActionExecutionAsync(ActionExecutingContext context,ActionExecutionDelegate actionExecutionDelegate)
   {
        return base.OnActionExecutionAsync(context, actionExecutionDelegate); //BreakPoint
   }
}

Action filters 是 ASP.NET 核心 MVC 管道的一部分,不适用于(至少目前)最小 API。