获取当前操作的完整路径

Posted

技术标签:

【中文标题】获取当前操作的完整路径【英文标题】:Get the full route to current action 【发布时间】:2017-01-06 18:01:44 【问题描述】:

我有一个带有基本路由的简单 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"

【问题讨论】:

试试 [HttpGet("info/Id?")] 我在那儿!感谢您的评论,但问题是关于在方法中检索为字符串,遵循到达该方法的路线。我的路由目前运行良好,我无法将 Id 设置为可选。 好的,问题已编辑。 【参考方案1】:

您可以使用 .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” //例如

【讨论】:

这很好,当您的代码在操作中时。如果你需要一个动作的路径,比如说,在一个视图中?【参考方案2】:

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

【讨论】:

感谢它也有效!例如,您知道如何过滤 /api/ 之后的部分吗? @BlackHoleGalaxy “过滤器”是什么意思? 在我的示例中,仅检索路线的 /api/ 之后的部分:/document/info/Id @BlackHoleGalaxy 你可以随时使用myRoute.Replace("/api", string.Empty) 作为快速破解。【参考方案3】:

如果你想在 API 控制器上使用任何 HttpMethod 属性指定的原始路由模板,那么可以这样做:

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

如果原来的路由属性是:[HttpGet("Self/id")]

routeTemplate 值为:"Self/id"

【讨论】:

【参考方案4】:
Url.ActionContext.ActionDescriptor.AttributeRouteInfo.Template

"vversion/cardId/cardsTest" $1

【讨论】:

在 .Net 5+ 中,为什么这不是正确的答案? Url.ActionContext.ActionDescriptor.AttributeRouteInfo.Template 请解释您的代码。另外,您应该注意,这不是问题中所要求的。

以上是关于获取当前操作的完整路径的主要内容,如果未能解决你的问题,请参考以下文章

linux获取当前路径

python 获取当前文件夹的完整路径

PHP 获取当前文件的完整路径

获取当前文件的完整路径

获取当前页面完整路径的方法:

Mongodb父引用树获取当前位置和完整路径