.net 7 禁用特定端点的中间件

问题描述 投票:0回答:1

可以禁用特定端点的中间件吗?我有在应用程序中注册的中间件,使用:

app.UseMiddleware<SomeMiddleware>(someArgs);

我想在所有方法中使用这个中间件,除了login()和refresh()。有没有什么属性可以用来标记一个方法?我不想对 `context.Request.Path.

设定条件
c# asp.net-core middleware webapi .net-7.0
1个回答
0
投票

在 ASP.NET Core 中,没有可用于禁用特定终结点的中间件的内置属性。但是,您可以通过在中间件本身中添加条件语句来实现此目的。

以下是如何在您的

SomeMiddleware
中实现此示例:

public class SomeMiddleware
{
    private readonly RequestDelegate _next;

    public SomeMiddleware(RequestDelegate next)
    {
        _next = next;
    }

    public async Task Invoke(HttpContext context)
    {
        // Check if the request path is login or refresh
        if (context.Request.Path.Equals("/login") || context.Request.Path.Equals("/refresh"))
        {
            // Skip the middleware and proceed to the next one in the pipeline
            await _next(context);
        }
        else
        {
            // Execute the middleware logic for other endpoints
            // ...
            await _next(context);
        }
    }
}

在此示例中,如果请求路径是

/login
/refresh
,中间件将跳过其处理并允许请求继续通过管道而不受干扰。对于所有其他端点,它将执行其逻辑。

记得在您的

SomeMiddleware
中注册
Startup.cs

public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
    // ...
    app.UseMiddleware<SomeMiddleware>();
    // ...
}

这种方法允许您根据特定端点有条件地应用中间件。

© www.soinside.com 2019 - 2024. All rights reserved.