ASP.NET Core での HttpContext へのアクセス: ベスト プラクティス
HttpContext.Current
に直接アクセスすることは、アーキテクチャが複雑になる可能性があるため、ASP.NET Core では推奨されません。 この記事では、HTTP コンテキスト情報を取得するための優れた代替手段について説明します。
方法 1: コントローラーでの直接アクセス
ASP.NET Core コントローラーは、簡単なアプローチを提供します。 HttpContext
プロパティは直接アクセスを許可します:
<code class="language-csharp">public class HomeController : Controller { public IActionResult Index() { // Access HttpContext directly string host = $"{HttpContext.Request.Scheme}://{HttpContext.Request.Host}"; // ... further code utilizing HttpContext ... } }</code>
方法 2: ミドルウェアの HttpContext パラメーター
カスタムミドルウェアコンポーネントは、HttpContext
メソッド内のパラメータとして Invoke
を受け取ります:
<code class="language-csharp">public class MyMiddleware { public async Task InvokeAsync(HttpContext context) { // Access HttpContext within middleware string host = $"{context.Request.Scheme}://{context.Request.Host}"; // ... subsequent middleware operations ... await context.Next(); } }</code>
方法 3: IHttpContextAccessor を使用する
コントローラーやミドルウェアの外部のサービスまたは他のクラスから HttpContext
にアクセスするには、IHttpContextAccessor
サービスを利用します。 これには依存関係の注入が必要です:
<code class="language-csharp">public class MyService { private readonly IHttpContextAccessor _httpContextAccessor; public MyService(IHttpContextAccessor httpContextAccessor) { _httpContextAccessor = httpContextAccessor; } public string GetHost() { // Access HttpContext via IHttpContextAccessor var context = _httpContextAccessor.HttpContext; return context == null ? null : $"{context.Request.Scheme}://{context.Request.Host}"; } }</code>
IHttpContextAccessor
メソッドに ConfigureServices
を忘れずに登録してください:
<code class="language-csharp">public void ConfigureServices(IServiceCollection services) { services.AddHttpContextAccessor(); // ... other service registrations ... }</code>
適切な方法の選択は状況に応じて異なります。 コントローラーは直接アクセスを使用します。ミドルウェアは HttpContext
パラメータを利用します。サービスの場合は、IHttpContextAccessor
が推奨されるソリューションです。 これにより、コードがよりクリーンで保守しやすくなります。
以上がASP.NET Core で HttpContext に適切にアクセスするにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。