【问题标题】:How To get route matched template in .Net Core 2.2?如何在 .Net Core 2.2 中获取路由匹配模板?
【发布时间】:2020-09-21 13:56:01
【问题描述】:

在我的控制器上方有这个属性:

[Route("preflight/{textSlug}")]
[Route("magazine/{textSlug}")]
[Route("content/{textSlug}")]

如何获取模板的第一部分(例如:预检) 不使用:

var path = Request.Path.Value.ToLower();
if (path.Contains("preflight")

而不是正则表达式。

【问题讨论】:

  • @RuardvanElburg 我希望有其他不涉及正则表达式的解决方案。
  • 你现在不是解析path,而是解析route?有什么不同?为什么不使用 RegEx?这是valid alternative

标签: asp.net-core routes asp.net-core-mvc


【解决方案1】:

要获取当前请求路由模板,您可以尝试ControllerContext.ActionDescriptor.AttributeRouteInfo.Template

[Route("preflight/{textSlug}")]
[Route("magazine/{textSlug}")]
[Route("content/{textSlug}")]
public IActionResult Privacy()
{ 
    var route = ControllerContext.ActionDescriptor.AttributeRouteInfo.Template;
    return View();
}

【讨论】:

  • 这仅适用于模板以操作开头。但是您将如何确定[Route("[controller]/preflight/{textSlug}")] 中的操作? route.Contains("preflight")?
【解决方案2】:

Route 一个Name 怎么样,例如[Route("preflight/{textSlug}", Name="preflight")]?

您可以通过以下方式获取请求使用的路由:

var name = ControllerContext.ActionDescriptor.AttributeRouteInfo.Name;

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-08-06
    • 1970-01-01
    • 1970-01-01
    • 2015-02-07
    • 1970-01-01
    • 1970-01-01
    • 2011-09-28
    • 1970-01-01
    相关资源
    最近更新 更多