获取当前操作的完整路线

时间:2017-01-06 18:01:45

标签: c# .net asp.net-core asp.net-core-mvc .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
    }
}

为了达到此方法,我必须致电GET /api/document/info/some-id-here

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

所以我可以这样做:

var myRoute = retrieveRoute();

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

4 个答案:

答案 0 :(得分:28)

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

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;
    }
}

结果路线:&#34; / api / document / info / some-id-here&#34; //例如

答案 1 :(得分:7)

您还可以要求MVC根据当前路线值创建新的路线网址:

[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为您提供当前请求的路由值。

答案 2 :(得分:0)

如果您希望使用任何 HttpMethod 属性指定的 API 控制器上的原始路由模板,则可以这样做:

var routeAttribute = Url.ActionContext.ActionDescriptor.EndpointMetadata.First(d => d is HttpMethodAttribute);
var routeTemplate = ((HttpMethodAttribute)routeAttribute).Template;

如果原始路由属性是:[HttpGet("Self/{id}")]

routeTemplate 值为:"Self/{id}"

答案 3 :(得分:-1)

Url.ActionContext.ActionDescriptor.AttributeRouteInfo.Template

"v{version}/{cardId}/cardsTest" {$1}