特定のリクエストをチェックするミドルウェアを作成しようとしています。
たとえば、私はそのようなルートを持っています:
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'の定義が含まれておらず、タイプ 'HttpRequest'の最初の引数を受け入れるアクセス可能な拡張メソッド 'RouteValues'が見つかりません(usingディレクティブまたはアセンブリ参照がありませんか?)
var value = httpContext.Request.RouteValues["paramToCheck"];
このプロパティにアクセスする方法または必要なチェックを実行する方法を教えてください。
コード:
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プロジェクトに移動できません。
[〜#〜]更新[〜#〜]
Microsoft.AspNetCore.Http.Abstractions 3.0.0
メタパッケージ内のNetCoreApp 3
にRouteValues
プロパティが追加されたため、現在は達成できないようです。また、最新バージョンはnetstandard 2.1
であるため、このパッケージを2.2.0
プロジェクトにインストールすることはできません。
クラスライブラリを使用して、私にとっての答えは、Microsoft.AspNetCore.App
の代わりに.netcore 3.1のMicrosoft.AspNetCore.Http.Abstractions v2.2
を使用するようにアップグレードすることでした
述べたように here 、. net core 3はすべての小さなパッケージを削除したので、私は置き換えました
<PropertyGroup>
<TargetFramework>netcoreapp3.1</TargetFramework>
</PropertyGroup>
<ItemGroup>
<PackageReference Include="Microsoft.AspNetCore.Http.Abstractions" Version="2.2.0" />
</ItemGroup>
と
<PropertyGroup>
<TargetFramework>netcoreapp3.1</TargetFramework>
</PropertyGroup>
<ItemGroup>
<FrameworkReference Include="Microsoft.AspNetCore.App"/>
</ItemGroup>
そして、私はそのようにルートにアクセスできました:
HttpContext.Request.RouteValues["version"];
{version}
はルートに設定されています。