如何从 ASPNETCORE OData 请求的中间件中获取路由数据?

How to Get Route Data from Middleware for ASPNETCORE OData request?

我有以下中间件 class,它获取当前请求的路由数据。

如果您在值控制器上执行 Get,您将看到 context.GetRouteData() returns 一个不为空的值。我已将 Swagger\Swashbuckle 连接到附加的项目中,以使其更易于演示。

但是,如果您调用博客 OData 控制器 (http://localhost:40946/odata/Blog),context.GetRouteData() returns null。

有谁知道如何从 OData 请求的中间件访问 RouteData?

public class TestMiddleware
{
    protected readonly RequestDelegate _next;

    public TestMiddleware(RequestDelegate next)
    {
        this._next = next;
    }

    public virtual async Task Invoke(HttpContext context)
    {
        var routeData = context.GetRouteData();

        await this._next.Invoke(context);
    }
}

Link to sample solution demonstrating the issue.

看起来 OData 中间件没有将路由信息作为 IRoutingFeature 提供给上下文。 Link to Source Code

不确定根本原因 - 但作为解决方法,您可以使用

var httpRequestFeature = context.Features[typeof(IHttpRequestFeature)] as IHttpRequestFeature;
var path = httpRequestFeature?.Path;