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。
我正在做一个最小的 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。