获取当前操作的完整路线

Bla*_*axy 25 .net c# asp.net-core-mvc .net-core asp.net-core

我有一个基本路由的简单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
    }
}
Run Code Online (Sandbox Code Playgroud)

所以要达到这个方法,我必须打电话GET /api/document/info/some-id-here.

是否可以使用.NET Core,在该方法中,以字符串形式检索完整路径?

所以我可以这样做:

var myRoute = retrieveRoute();

// myRoute = "/api/document/info/some-id-here"
Run Code Online (Sandbox Code Playgroud)

Bal*_*thu 32

您可以使用 .Net Core中的Request选项(HttpRequest)获取完整的请求URL .

var route = Request.Path.Value;
Run Code Online (Sandbox Code Playgroud)

你的最终代码.

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

结果路由:"/ api/document/info/some-id-here" //例如

  • 当你的代码在行动中时,这很好.如果你需要一个动作的路径,比如说,在视图中怎么办? (5认同)

Nat*_*ini 9

您还可以要求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);
    }
}
Run Code Online (Sandbox Code Playgroud)

Url.RouteUrl是一个帮助方法,允许您在给定任何路径值的情况下构建路径URL.RouteData.Values为您提供当前请求的路由值.