IActionContextAccessor 與 ActionContextAccessor 已標示為過時,且診斷識別碼 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 產生具有診斷標識符 ASPDEPR006的編譯程式警告:
警告ASPDEPR006:ActionContextAccessor 已過時,未來版本將會移除。 如需詳細資訊,請瀏覽:https://aka.ms/aspnet/deprecate/006。
破壞性變更的類型
這項變更可能會影響 來源相容性。
變更的原因
在 ASP.NET Core 中引進端點路由時, IActionContextAccessor 已不再需要。 端點路由基礎結構提供更簡潔、更直接的方式,可透過 HttpContext.GetEndpoint()存取端點元數據,並配合 ASP.NET Core 架構向端點路由的演進。
建議的動作
從 移 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.
}
}