Digamos que tengo una aplicación de página de afeitar, y hay una página de afeitar "Producto.cshtml", ¿cómo puedo ver la cadena "Producto.cshtml" en el objeto HttpContext (asumiendo que puedo acceder al objeto HttpContext en el middleware antes del middleware de punto final como muestra el siguiente código)? Traté de usar el método de extensión EndpointHttpContextExtensions.GetEndpoint(HttpContext) , aún no pude encontrar nada que pudiera contener "Product.cshtml".
// startup.cs public void Configure(IApplicationBuilder app, IWebHostEnvironment env) { app.UseRouting(); app.UseMiddleware<GetEndPointMiddleWare>(); app.UseEndpoints(endpoints => { endpoints.MapRazorPages(); }); } public class GetEndPointMiddleWare { private RequestDelegate next; public QueryStringMiddleWare(RequestDelegate nextDelegate) { next = nextDelegate; } public async Task Invoke(HttpContext context) { ... await next(context); // I want to print "Product.cshtml" here // var endpoint = EndpointHttpContextExtensions.GetEndpoint(context); // <---- didn't find any property that has the string I want } }La ruta a la página está dentro de los metadatos del punto final como parte de un objeto PageActionDescriptor , por lo que se puede acceder y analizar. Un ejemplo de middleware que inspecciona la ruta de la página:
// Startup.cs -> Configure() app.UseRouting(); app.Use(next => context => { var endpoint = context.GetEndpoint(); if (endpoint is null) { return Task.CompletedTask; } if (endpoint.Metadata.FirstOrDefault(i => i is PageActionDescriptor) is PageActionDescriptor pageDescriptor) { string pagePath = pageDescriptor.RelativePath; Console.WriteLine($"Page path: {pagePath}"); // '/Pages/Product.cshtml' } return Task.CompletedTask; }); app.UseEndpoints(endpoints => { endpoints.MapRazorPages(); endpoints.MapDefaultControllerRoute(); });(Adaptado del ejemplo de documentos )