c# - 自定义 map 路线

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

我正在尝试创建一些自定义 map 路线,但无法正常工作。

我的最终目标是能够指定如下内容。基本上我的 URL 是用“id”和“name”的值对构造的。该名称无关紧要,仅供用户取笑,但我会在我的 Controller 中要求 ID。

/dashboards/5-My-Estate-name/89-My-subgroup-name/133-Maybe-even-another-subgroup

对于初学者来说,我正在研究第一部分,但遇到了麻烦。

浏览到“http://localhost:53933/dashboards/109-building-xyz”,同时使用以下路由生成错误 A public action method '109-building-xyz' was not found on controller ' MyInterfaceInterface.Controllers.DashboardsController'.

routes.MapRoute(
  "Dashboard",
  "dashboards/{id}-{name}", // URL pattern
   new { controller = "Dashboards", action = "Index" },
   new { id = @"\d+", name = UrlParameter.Optional }
);

显然,我希望将其路由到带参数的 Index 函数。

我做错了什么?我的结构是否正确?我来自 web-PHP 背景并使用 htaccess 来实现这些事情。

谢谢

最佳答案

路线的顺序很重要。 MVC 会将第一个声明的路由与匹配 URL 模式的模式相匹配。

所以如果你有这个:

routes.MapRoute(
  "Default",
  "{controller}/{action}/{id}", // URL pattern
   new { controller = "Home", action = "Index" },
   new { id = UrlParameter.Optional }
);
routes.MapRoute(
  "Dashboard",
  "dashboards/{id}-{name}", // URL pattern
   new { controller = "Dashboards", action = "Index" },
   new { id = @"\d+", name = UrlParameter.Optional }
);

那么 URL http://localhost:53933/dashboards/109-building-xyz 会发生什么,MVC 会将“dashboards”与 Controller 匹配,“109-building-xyz” “到行动。

您需要始终先声明最具体的路由,然后再声明更通用的路由,如下所示:

routes.MapRoute(
  "Dashboard",
  "dashboards/{id}-{name}", // URL pattern
   new { controller = "Dashboards", action = "Index" },
   new { id = @"\d+", name = UrlParameter.Optional }
);
routes.MapRoute(
  "Default",
  "{controller}/{action}/{id}", // URL pattern
   new { controller = "Home", action = "Index" },
   new { id = UrlParameter.Optional }
);

但是,Morten Mertner 在他的评论中是正确的——我认为您不能有 2 个不被正斜杠分隔的路由参数。您需要将 URL 模式更改为类似这样的内容才能将其与默认路由引擎一起使用:

"dashboards/{id}/{name}"

关于c# - 自定义 map 路线,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10723628/

相关文章:

c# - 异步任务和简单注入(inject)器生命周期范围

c# - 在类声明中参数化通用接口(interface)

c# - ViewBag 作为 session 模型的持有者

asp.net-mvc - 获取 VS2010,特别是 Razor View ,将自定义 "data-"属性识别为有效

c# - jQuery Ajax、MVC 和查询字符串

c# - GetVersionEx() 已弃用 : should I use Environment. OSVersion?

c# - 如何在循环外访问字符串数组

c# - .NET MVC 应用程序中所有 HTTP GET 操作的 OnActionExecuted 代码

c# - 强类型通用属性替代方案

c# - "Remember Me"与 asp.net 网页