我想知道創建我的控制器結構的最佳方法。ASP.NET MVC5中的複雜路由
比方說,我有幾個事件,每個事件我可以有幾個設備。
我的想法是有類似:
http://mydomain/event/1/device/4
所以我可以訪問設備ID 4(屬於事件ID 1)。
我應該有兩個不同的控制器?一個事件和設備或設備信息必須在EventController?
如何在我的RouteConfig中使用此路由?
我想知道創建我的控制器結構的最佳方法。ASP.NET MVC5中的複雜路由
比方說,我有幾個事件,每個事件我可以有幾個設備。
我的想法是有類似:
http://mydomain/event/1/device/4
所以我可以訪問設備ID 4(屬於事件ID 1)。
我應該有兩個不同的控制器?一個事件和設備或設備信息必須在EventController?
如何在我的RouteConfig中使用此路由?
這完全取決於你如何設置它。您可以使用單獨的控制器或相同的控制器。沒關係。
至於路由去,如果你使用的是標準的MVC路由,你需要爲此創建自定義路由:
routes.MapRoute(
"EventDevice",
"event/{eventId}/device/{deviceId}",
new { controller = "Event", action = "Device" }
);
這將有這樣的對應:
public class EventController : Controller
{
public ActionResult Device(int eventId, int deviceId)
{
...
}
}
只要確保您將放在之前的默認路線,所以它會先捕獲。有關自定義路由的更多信息,請參閱:http://www.asp.net/mvc/overview/older-versions-1/controllers-and-routing/creating-custom-routes-cs
或者,在MVC5 +中,您可以使用屬性路由,這使得定義自定義路由的過程變得非常容易。在RouteConfig.cs
,取消對該行:
// routes.MapMvcAttributeRoutes();
然後,在你的行動定義如下路線:
[Route("event/{eventId}/device/{deviceId}")]
public ActionResult Device(int eventId, int deviceId)
{
...
您還可以使用[RoutePrefix]
你的控制器類移動路線的一部分應用到整個控制器。例如:
[RoutePrefix("event")]
public class EventController : Controller
{
[Route("{eventId}/device/{deviceId}")]
public ActionResult Device(int eventId, int deviceId)
{
...
}
}
更多關於路由屬性看:http://blogs.msdn.com/b/webdev/archive/2013/10/17/attribute-routing-in-asp-net-mvc-5.aspx