按方法名称获取路由信息
本文关键字:路由 信息 获取 方法 | 更新日期: 2023-09-27 18:37:15
我在我的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}"
我自己找到了解决方案:
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",并通过简单的字符串函数检索。