UrlHelper.ActionLinkメソッドで絶対URLを取得する - ASP.NET Core MVC

UrlHelperのActionLinkメソッドを使うと絶対URLを取得できます。

ASP.NET Core 3.0で追加されたようです。知らなかった。

docs.microsoft.com

Actionメソッド

Actionメソッドは相対URLを取得できます。普段使うやつですね。

Url.Action("Index", "Sample")
// 戻り値
// /sample/index
ActionLinkメソッド

ActionLinkメソッドは絶対URLを取得できます。ビュー以外での利用になるかと思いますが、絶対URLが欲しいときがたまにあります。

Url.ActionLink("Index", "Sample")
// 戻り値(https://example.jpに配置してあるとして)
// https://example.jp/sample/index

Actionメソッドは引数にscheme(protocol)やhostを指定すると絶対URLを返すようになっていて、ActionLinkメソッドはこの仕様を利用しているようです。schemeやhostの値にHttpContextのリクエストから取得した値を指定してActionメソッドを呼び出しています。

スキームを指定したActionメソッド
Url.Action("Index", "Sample", null, HttpContext.Request.Scheme)
// 戻り値(https://example.jpに配置してあるとして)
// https://example.jp/sample/index