【问题标题】:Getting Routing-Information by Method Name通过方法名称获取路由信息
【发布时间】:2016-06-16 19:48:03
【问题描述】:

我在我的 MVC 项目中使用属性路由,效果很好:

[RoutePrefix("installation")]
public class InstController:Controller {
  [Route("inittest/{lang}")]
  public ActionResult InitTest(string lang) {
    // do something
  }
}

现在我需要找到一种仅通过方法名来获取路由信息的方法。例如:

string GetRoutingOf("MyNamespace.InstController.InitTest"); // returns "installation/inittest/{lang}"

【问题讨论】:

  • 在投反对票时留下评论会很高兴,这样可以改进问题。

标签: c# asp.net-mvc routing attributes


【解决方案1】:

我自己找到了解决方案:

private string GetRoute(string className, string methodName)
{
    var routes = RouteTable.Routes.ToList().OfType<Route>();
    foreach (var route in routes)
    {
        if (route.Defaults != null)
        {
            var controller = route.Defaults.FirstOrDefault(d => d.Key == "controller");
            var action = route.Defaults.FirstOrDefault(d => d.Key == "action");

            if (controller.Value != null && controller.Value.ToString() == className && action.Value != null && action.Value.ToString() == methodName)
            {
                return route.Url;
            }
        }
    }

    return null;
}

这有一些限制,但是:如果有多个具有相同名称的方法(例如,void Select(int id)void Select(string name),这不起作用。

在我的问题示例中,类名和方法名将是“Inst”和“Inittest”,并通过简单的字符串函数检索。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-02-10
    • 2012-12-25
    • 1970-01-01
    • 2015-05-19
    • 2018-04-04
    • 2016-03-26
    • 2018-04-30
    • 2015-02-12
    相关资源
    最近更新 更多