gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-03 17:53:53 24 4
gpt4 key购买 nike

给定路由名称,我可以获得默认操作名称和 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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com