私はASP.NET Coreにかなり慣れていません。現在、UrlHelperが一般的にどのように機能するかを理解しようとしています。
私のコントローラーで、同じコントローラー内の別のアクションへの絶対URLを作成します。 http://localhost:PORT/api/controller/action
。問題は、どうすればよいですか。
私は次のことを試しました:
var urlHelper = new UrlHelper(new ActionContext());
var url = urlHelper.Action("ACTION", "CONTROLLER");
さらに、ActionContext
のような異なるコンテキストは何ですか?
UrlHelper
を自分で作成するべきではありません。現在使用しているコンテキストが何であれ、既に IUrlHelper
インスタンスが使用可能である可能性があります:
ControllerBase.Url
コントローラの内部。PageModel.Url
Razorビュー内。ViewComponent.Url
ビューコンポーネント内。そのため、this.Url
にアクセスしてURLヘルパーを取得できる可能性があります。
独自のサービスを実装するときなど、それが存在しない状況にいる場合は、常に IUrlHelperFactory
を IActionContextAccessor
最初に現在のアクションコンテキストを取得してから、そのためのURLヘルパーを作成します。
ActionContext
とは、基本的には、現在のリクエストが処理されている現在のMVCアクションコンテキストを識別するさまざまな値を含むオブジェクトです。そのため、実際のリクエスト、解決されたコントローラーとアクション、またはバインドされたモデルオブジェクトに関するモデルの状態に関する情報が含まれています。これは基本的に HttpContext
の拡張であり、MVC固有の情報も含まれています。
ASP.NET Core 2.2以降を実行している場合は、サービス内でLinkGenerator
の代わりに IUrlHelper
を使用することもできます。これにより、簡単に生成できます。 URLは、IUrlHelperFactory
を介してヘルパーを作成する必要がある場合と比較されます。