2016-03-03 78 views
-1

获取路由信息I使用属性的路由在我的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}" 
+0

很高兴离开在投票时发表评论,这样可以改善问题。 –

回答

0

我找到了解决自己:

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)这不起作用

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