.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

filter-contextのすべてのルート固有の値にアクセスできます。コンテキストにはRouteData辞書が含まれていRouteData

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

ドキュメントで ActionFiltersの詳細情報を見つけることができます。

Related