You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在ASP.NET中间件中检测请求是否被YARP转发?

如何在ASP.NET中间件中检测请求是否被YARP转发

我有一个ASP.NET中间件,只想在请求未被YARP转发时运行,请问能否通过请求头或其他方式检测当前请求是否被YARP转发?

我当前使用的是从.NET Framework升级到.NET 8时,由微软升级助手生成的YARP配置,代码如下:

var builder = WebApplication.CreateBuilder(args);
...    
builder.Services.AddHttpForwarder();
...
var app = builder.Build();
...
app.MapForwarder("/{**catch-all}", proxyTo)
    .Add(static builder => ((RouteEndpointBuilder)builder).Order = int.MaxValue);

根据建议更新后的MapForwarder配置(可用于转发过程的日志记录):

app.MapForwarder("/{**catch-all}", proxyTo, (options) => 
{
    options.AddRequestTransform(async transformContext =>
    {
        Console.WriteLine($"Forwarding request to: {transformContext.DestinationPrefix}");
        await Task.CompletedTask;
    });
    options.AddResponseTransform(async transformContext =>
    {
        Console.WriteLine($"Response received with status code: {transformContext.HttpContext.Response.StatusCode}");
        await Task.CompletedTask;
    });
})
.Add(static builder => ((RouteEndpointBuilder)builder).Order = int.MaxValue);

不过上述配置仅能实现转发流程的日志输出,我真正需要的是在中间件内判断请求是否会被YARP转发,以此决定是否执行该中间件的逻辑。最终采用的实现方式如下:

Context.GetEndpoint()?.DisplayName == "/{**catch-all}";

内容的提问来源于stack exchange,提问作者Kyle Fuller

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.19 15:42:09