Я пытаюсь создать промежуточное программное обеспечение, которое выполняет некоторую проверку для определенных запросов.
Например, у меня есть такие маршруты:
api/Test/{paramToCheck}/aaa
api/Test/bbb/ccc
и у меня есть эти запросы:
http://some-host-and-port/api/Test/1234/aaa
http://some-host-and-port/api/Test/bbb/ccc
Теперь внутри моего промежуточное ПО Я хочу проверить, содержит ли запрос {paramToCheck}
и получить ли значение этого параметра.
Когда я устанавливаю точку останова внутри InvokeAsync
, я вижу httpContext.Request.RouteValues
свойство, содержащее все необходимые данные (Keys
содержит "paramToCheck"
и Values
содержит его значение).
Но в коде я не могу получить доступ к этому свойству, я получаю ошибку:
Ошибка CS1061: «HttpRequest» не содержит может быть найдено определение для 'RouteValues' и нет доступного метода расширения 'RouteValues', принимающего первый аргумент типа 'HttpRequest' (вам не хватает директивы using или ссылки на сборку?)
var value = httpContext.Request.RouteValues["paramToCheck"];
Как получить доступ к этому свойству или как выполнить необходимую проверку?
* 1 043 * Код:
public class MyMiddleware
{
private readonly RequestDelegate _next;
public MyMiddleware
(
RequestDelegate next
) => this._next = next;
public async Task InvokeAsync(HttpContext httpContext)
{
var value = httpContext.Request.RouteValues["paramToCheck"]; // error here
//... some logis with value
await this._next(httpContext);
}
}
РЕДАКТИРОВАТЬ
Промежуточное программное обеспечение находится внутри netstandard2.1
библиотеки классов и не может быть перемещено в проект API, поскольку оно является общим и должно использоваться несколькими проектами API.
ОБНОВЛЕНИЕ
Похоже, что в настоящее время это не может быть достигнуто, поскольку свойство RouteValues
было добавлено в Microsoft.AspNetCore.Http.Abstractions 3.0.0
, который находится внутри NetCoreApp 3
метапакета. И нет возможности установить этот пакет в netstandard 2.1
проекте, потому что последняя версия 2.2.0
.