そのため、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 に移動すると、ID のオプションのパラメーターを持つ users 関数が呼び出され、機能しています。しかし今、私はエンドポイント ~/DesktopModules/MyServices/API/Welcome/locations を作りたいと思っています。これは場所 ID を取ることができます。私はこれを書くことはできません:
routeManager.MapRoute("MyServices", "{controller}/{action}/{locationID}", new[] { "HelloWorldServices" });
あるいは
routeManager.MapRoute("MyServices", "{controller}/locations/{locationID}", new[] { "HelloWorldServices" });
そのようには機能しません。どちらが先か (ユーザーまたは場所) は ID を認識し、2 番目は認識しません。何が機能しないかはわかりますが、何が機能するかはわかりません。多くの検索にもかかわらず、見つけることができませんでした。次のような例もいくつか見つけました。
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」関数で処理されます。