web-dev-qa-db-ja.com

現在のアクションへの完全なルートを取得する

基本的なルーティングを備えたシンプルなAPIがあります。デフォルトのVisual Studio 2015 ASP.NET Core APIテンプレートを使用してセットアップされました。

私はこのコントローラーとアクションを持っています:

[Route("api/[controller]")]
public class DocumentController : Controller
{
    [HttpGet("info/{Id}")]
    public async Task<Data> Get(string Id)
    {
        //Logic
    }
}

したがって、このメソッドに到達するには、GET /api/document/info/some-id-hereを呼び出す必要があります。

。NET Coreでは、そのメソッド内で、完全なルートを文字列として取得できますか?

だから私は例えばすることができます:

var myRoute = retrieveRoute();

// myRoute = "/api/document/info/some-id-here"
23
BlackHoleGalaxy

.Net CoreのRequestオプション(HttpRequest)を使用して、要求された完全なURLを取得できます。

var route = Request.Path.Value;

最終的なコード。

[Route("api/[controller]")]
public class DocumentController : Controller
{
    [HttpGet("info/{Id}")]
    public async Task<Data> Get(string Id)
    {
        var route = Request.Path.Value;
    }
}

結果ルート: "/ api/document/info/some-id-here"//たとえば

31

MVCに、現在のルート値に基づいて新しいルートURLを作成するように依頼することもできます。

[Route("api/[controller]")]
public class DocumentController : Controller
{
    [HttpGet("info/{Id}")]
    public async Task<Data> Get(string Id)
    {
        //Logic

        var myRoute = Url.RouteUrl(RouteData.Values);
    }
}

Url.RouteUrlは、ルート値を指定してルートURLを作成できるヘルパーメソッドです。 RouteData.Valuesは、currentリクエストのルート値を提供します。

9
Nate Barbettini