.Net Core 3.1 IActionFilterはURLで必要なパラメータを取得します

2020-02-14 c# asp.net-core

タイトルにあるように、ルートで必要なパラメーターを取得しようとしています:

https://localhost:44386/api/Users/c6b44b17-1b05-4ab6-a8c0-6968b4ea1ced

これは、それぞれの値を確認するためにブレークポイントを設定した私のフィルターです。

残念ながら、最初の2つにはキーを指定しても何もありません(例: Query["_id"] )。

3つ目は正しいルートの配列をフェッチしますが、これは単なるハックであると感じるため、最後のインデックス値を使用したくありません。

私はドキュメントを見て、エンドポイントのルーティング構成に触れて、この特定のルートを明示的に定義しないと、以下の簡単な方法を見つけることができません(これと同じシナリオを必要とする可能性のある大量のルートになる可能性があるため)。

どんな助けでも本当に感謝します。

public class ProfileIsCreatorFilter : Attribute, IActionFilter
{
        public void OnActionExecuting(ActionExecutingContext context)
        {
            var query = context.HttpContext.Request.Query;
            var queryString = context.HttpContext.Request.QueryString;
            var route = context.HttpContext.Request.RouteValues;
        }
}
[HttpGet("{_id}"), Authorize, ProfileIsCreatorFilter]
public ActionResult<User> GetUser(Guid _id)
{
    return Ok();
}

混乱を避けるためにすべてを簡略化しました。

Answers

フィルターコンテキストのすべてのルート固有の値にアクセスできます。コンテキストにはRouteDataディクショナリが含まれていRouteData

public override void OnActionExecuting(ActionExecutingContext context) {
    string myvalue = context.RouteData.Values["mykey"];
}

docsで ActionFiltersの詳細を確認できます。

Related