首页 > 解决方案 > 如何在中间件中获取没有 uri 参数的 Url - AspCore

问题描述

我正在实现一个自定义中间件,我试图在没有 Uri 参数的情况下访问请求 url。

我在实现自定义中间件时可以访问的所有内容是HttpContext

    public async Task InvokeAsync(HttpContext context)

HttpContext有一个属性Request,该属性Path具有可以返回带有 URI 参数的完整 url 的属性。

例如:/api/v1/customer/12345我想要得到的是路线api/v1/customer/{customerId}

这是可行的吗?

标签: c#asp.net-coreasp.net-web-apiasp.net-core-middleware

解决方案


这是可行的吗?

不,你不能。路由是一个 ASP.NET Core MVC 概念,因此它的存在只能在 ASP.NET Core 的 MVC 中间件中找到。

不确定你的中间件是做什么用的。作为一种解决方法,你可以在动作过滤器中做你的东西:

public class LogActionFilter : IActionFilter
{
    public void OnActionExecuted(ActionExecutedContext context)
    {

    }

    public void OnActionExecuting(ActionExecutingContext context)
    {
        //get the request route template
        var routeTemplate = context.ActionDescriptor.AttributeRouteInfo.Template;
    }
}

推荐阅读