我想对所有asp.net核心最小API端点应用过滤器.
我想这样做的原因是对端点的返回值进行后处理.类似于这样的:
public class GlobalFilter : IEndpointFilter
{
private ILogger _logger;
public GlobalValidationFilter(ILogger<GlobalValidationFilter> logger)
{
_logger = logger;
}
public async ValueTask<object?> InvokeAsync(EndpointFilterInvocationContext invocationContext, EndpointFilterDelegate next)
{
try
{
var res = await next(invocationContext);
var result = res as Result;
if(result is not null)
{
// Here, access the `result` members and modify the return value accordingly...
}
return Results.Problem();
}
catch (Exception ex)
{
return Results.Problem(ex.ToString());
}
}
}
app
.MapPost("api/document/getById", async ([FromBody] GetDocumentRequest request) =>
{
var result = ...result-producing call...;
return result;
})
.AddEndpointFilter<GlobalFilter>() // Manually assigning the filter.
...
...;
这似乎有效,但我必须记住每次手动设置过滤器. 是否有方法将此过滤器自动应用于所有端点?
或者,是否可以用另一种方法实现同样的事情?据我所知,使用中间件不允许您判断端点返回值,而只能处理引发的异常.