C# 按方法名称获取路由信息

C# 按方法名称获取路由信息,c#,asp.net-mvc,routing,attributes,C#,Asp.net Mvc,Routing,Attributes,我在MVC项目中使用了属性路由,效果很好: [RoutePrefix("installation")] public class InstController:Controller { [Route("inittest/{lang}")] public ActionResult InitTest(string lang) { // do something } } 现在,我需要找到一种只通过methodname获取路由信息的方法。例如: string GetRoutingO

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

[RoutePrefix("installation")]
public class InstController:Controller {
  [Route("inittest/{lang}")]
  public ActionResult InitTest(string lang) {
    // do something
  }
}
现在,我需要找到一种只通过methodname获取路由信息的方法。例如:

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

我自己找到了一个解决办法:

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;
}
私有字符串GetRoute(字符串类名称、字符串方法名称)
{
var routes=RouteTable.routes.ToList(),of type();
foreach(路由中的var路由)
{
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)
{
返回路径Url;
}
}
}
返回null;
}
但是,这也有一些限制:如果有多个方法具有相同的名称(例如,
void Select(int-id)
void Select(string-name)
),则这不起作用


在我的问题示例中,classname和methodName将是“Inst”和“Inittest”,并通过简单的字符串函数进行检索。

最好在向下投票时留下注释,以便改进问题。