Как получить данные маршрута из Middleware для запроса OData ASPNETCORE? - PullRequest
0 голосов
/ 22 мая 2018

У меня есть следующий класс Middleware, который получает данные маршрута для текущего запроса.

Если вы выполните Get на контроллере значений, вы увидите context.GetRouteData () возвращает значение и не является нулевым,Я подключил Swagger \ Swashbuckle к присоединенному проекту, чтобы упростить демонстрацию.

Однако, если вы вызываете контроллер OData для блога (http://localhost:40946/odata/Blog), context.GetRouteData () возвращает null.

Кто-нибудь знает, как получить доступ к RouteData из промежуточного программного обеспечения для запроса OData?

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);
    }
}

Ссылка на пример решения, демонстрирующего проблему .

1 Ответ

0 голосов
/ 28 мая 2018

Похоже, что промежуточное ПО OData не предоставляет информацию о маршрутизации в виде IRoutingFeature для контекста. Ссылка на исходный код

Не уверен, что основная причина - но в качестве обходного пути вы можете использовать

var httpRequestFeature = context.Features[typeof(IHttpRequestFeature)] as IHttpRequestFeature;
var path = httpRequestFeature?.Path;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...