1

所以我在基于 MVC 的 DNN 6.2 服务框架中运行了基本的 Hello World 服务。路线,取自示例,是:

routeManager.MapRoute("MyServices", "{controller}/{action}", new[] { "HelloWorldServices" });

当我的操作转到 ~/DesktopModules/MyServices/API/Welcome/HelloWorld 时,它会调用 HelloWorld 函数并运行。到目前为止,我已经设法弄清楚我可以做到这一点:

routeManager.MapRoute("MyServices", "{controller}/{action}/{userID}", new[] { "HelloWorldServices" });

当我转到 ~/DesktopModules/MyServices/API/Welcome/users 时,它会调用 users 函数,该函数具有 ID 的可选参数,并且可以正常工作。但现在我想创建一个端点 ~/DesktopModules/MyServices/API/Welcome/locations,它可以采用位置 ID。我不能只写这个:

routeManager.MapRoute("MyServices", "{controller}/{action}/{locationID}", new[] { "HelloWorldServices" });

甚至

routeManager.MapRoute("MyServices", "{controller}/locations/{locationID}", new[] { "HelloWorldServices" });

它不是那样工作的。哪个是第一个(用户或位置)识别 ID,哪个第二个不识别。虽然我可以弄清楚什么不起作用,但我不知道什么会起作用,并且尽管进行了大量搜索,但仍然无法找到。我还发现了一些看起来像这样的例子:

routeManager.MapRoute("Html", "default", "", new { controller = "Service", action = "GetTabs" }, new[] { "DotNetNuke.Modules.Html" });

但我也无法弄清楚它是如何工作的。最终我也想做“~/DesktopModules/MyServices/API/Welcome/users/userid/locations/”。如果有人能给我一些例子,那将不胜感激!

更新:根据我查找 MVC 路由的答案。我意识到我必须通用地编写它,现在让这些工作:

{controller}/{action}
{controller}/{action}/{id}
{controller}/{action}/{id}/{secondaction}
{controller}/{action}/{id}/{secondaction}/{secondid}

“id”、“secondaction”和“secondid”都是可选的字符串参数。所以我可以有“users/userid/locations/locationid”......“locations/locationid”部分在“users”函数中处理。

4

1 回答 1

0

我在这里的一般建议是使用类似的路线图

{controller}/{action}/{id}

这是典型的默认 ASP.NET MVC 路由样式。然后你可以有一个作为可选 id 参数的用户方法,以及一个带有可选 id 参数的位置方法等。

这将为您提供真正动态的路线,并且更易于管理

于 2013-03-29T06:38:13.097 回答