web-dev-qa-db-ja.com

HttpRequest.RouteValuesプロパティはコードからはアクセスできませんが、デバッガーからはアクセスできます

特定のリクエストをチェックするミドルウェアを作成しようとしています。

たとえば、私はそのようなルートを持っています:

  • 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 3RouteValuesプロパティが追加されたため、現在は達成できないようです。また、最新バージョンはnetstandard 2.1であるため、このパッケージを2.2.0プロジェクトにインストールすることはできません。

6
Dixy

クラスライブラリを使用して、私にとっての答えは、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}はルートに設定されています。

0
HockeyJ