c# - MVC - 给定路由名称,我可以获得默认操作名称和 Controller 名称吗?

标签 c# asp.net asp.net-mvc asp.net-mvc-routing

给定路由名称,我可以获得默认操作名称和 Controller 名称吗?

routes.MapRoute(
      name: "MonthlyCalendar",
      url: "FMB/Calendar/{jamaatName}/{year}/{month}",
      defaults: new { controller = "FMB", action = "MonthlyCalendar", 
         jamaatName = UrlParameter.Optional,year = UrlParameter.Optional,
         month=UrlParameter.Optional}
);

最佳答案

不,当然,您不能仅从路由名称中获取 Controller 和操作名称。路由映射可能如下所示:{controller}/{action}/{id} .如果您只有一个路线名称,那是您唯一可以获得的东西。

另一方面,如果您有完整的网址,例如 http://example.com/Home/Index那么这是一个完全不同的故事。现在您可以从 RouteData 中获取 controller=Home 和 action=Index。

更新:

给定路由名称,您似乎正在尝试从路由配置中提取 Controller 和操作的默认值。这可以通过在 DataTokens 属性中注册时存储路由名称来轻松完成:

RouteTable.Routes.MapRoute(
    "foo",
    "{controller}/{action}", 
    new { controller = "Home", action = "Index" }
).DataTokens["__RouteName"] = "foo";

接着:
var route = RouteTable.Routes.OfType<Route>().FirstOrDefault(x => 
    x.DataTokens.ContainsKey("__RouteName") && 
    (string)x.DataTokens["__RouteName"] == "foo"
);
if (route != null)
{
    var defaultController = route.Defaults["controller"];
    var defaultAction = route.Defaults["action"];
}

您需要将路由名称存储在 DataTokens 中的原因是因为
信息在 Route 实例中不可用。

更新:

在某些时候,MS 添加了一个索引器到 RouteCollection按名称查找,因此不再需要上述内容:
 ((System.Web.Routing.Route)Url.RouteCollection["MyRouteName"]).Defaults

您可能应该首先检查以确保它存在以避免空异常。

关于c# - MVC - 给定路由名称,我可以获得默认操作名称和 Controller 名称吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16982898/

相关文章:

c# - 如何在 asp.net 中实现 SSL

c# - 最佳模拟库

c# - 如何在 Ajax 调用后更新 session ?

c# - Asp net Core 获取用户Windows用户名

c# - CharacterEllipsis 在 ItemsControl WPF 中不起作用

asp.net - 引用广告印象进行大规模 SQL 插入的最佳实践是什么?

asp.net-mvc - 在 ASP.NET MVC 中使用 View 模型 + 数据模型来支持类型化 View ?

c# - 如何查看元素在屏幕中是否可见?

c# - 如何在WCF服务中添加静态方法

asp.net - 拖动控制 Flash 电影问题?