2016-03-03 79 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」,並通過簡單的字符串函數進行檢索。