所以我在基于 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”函数中处理。