如何在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
相关产品推荐
相关产品推荐

