C# 按方法名称获取路由信息
我在MVC项目中使用了属性路由,效果很好: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
[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”,并通过简单的字符串函数进行检索。最好在向下投票时留下注释,以便改进问题。