IActionContextAccessor と ActionContextAccessor は、診断 ID ASPDEPR006で古い形式としてマークされています。 エンドポイント ルーティングの導入により、開発者はIActionContextAccessorを介してアクション記述子とメタデータ情報に直接アクセスできるため、HttpContext.GetEndpoint()は不要になります。
導入されたバージョン
.NET 10 Preview 7
以前の動作
以前は、 IActionContextAccessor を使用して現在の ActionContextにアクセスできました。
public class MyService
{
private readonly IActionContextAccessor _actionContextAccessor;
public MyService(IActionContextAccessor actionContextAccessor)
{
_actionContextAccessor = actionContextAccessor;
}
public void DoSomething()
{
var actionContext = _actionContextAccessor.ActionContext;
var actionDescriptor = actionContext?.ActionDescriptor;
// Use action descriptor metadata.
}
}
新しい動作
.NET 10 以降では、 IActionContextAccessor と ActionContextAccessor を使用すると、診断 ID ASPDEPR006を含むコンパイラ警告が生成されます。
警告ASPDEPR006: ActionContextAccessor は廃止され、今後のバージョンで削除される予定です。 詳細については、https://aka.ms/aspnet/deprecate/006 を参照してください。
破壊的変更の種類
この変更は、ソースの互換性に影響を与える可能性があります。
変更の理由
ASP.NET Core でのエンドポイント ルーティングの導入により、 IActionContextAccessor は不要になります。 エンドポイント ルーティング インフラストラクチャは、エンドポイント ルーティングに向けた ASP.NET Core のアーキテクチャの進化に合わせて、 HttpContext.GetEndpoint()を介してエンドポイント メタデータにアクセスするためのよりクリーンで直接的な方法を提供します。
推奨されるアクション
IActionContextAccessorからIHttpContextAccessorに移行し、HttpContext.GetEndpoint()を使用します。
以前は:
public class MyService
{
private readonly IActionContextAccessor _actionContextAccessor;
public MyService(IActionContextAccessor actionContextAccessor)
{
_actionContextAccessor = actionContextAccessor;
}
public void DoSomething()
{
var actionContext = _actionContextAccessor.ActionContext;
var actionDescriptor = actionContext?.ActionDescriptor;
// Use action descriptor metadata
}
}
その後:
public class MyService
{
private readonly IHttpContextAccessor _httpContextAccessor;
public MyService(IHttpContextAccessor httpContextAccessor)
{
_httpContextAccessor = httpContextAccessor;
}
public void DoSomething()
{
var httpContext = _httpContextAccessor.HttpContext;
var endpoint = httpContext?.GetEndpoint();
var actionDescriptor = endpoint?.Metadata.GetMetadata<ActionDescriptor>();
// Use action descriptor metadata.
}
}
影響を受ける API
.NET