应该何时将Action驻留在默认控制器中

时间:2013-07-26 13:47:43

标签: c# asp.net-mvc

从设计的角度来看,如果我希望我的网站有两个网址,如下所示 -

www.mysite.com

www.mysite.com/Stuff

如果我的默认控制器是HomeController,那么“Stuff”操作何时应该在HomeController

动作何时应该在HomeController

此外,如何我没有“Stuff”操作驻留在HomeController中,仍然显示如下 - www.mysite.com/Stuff? 这会是不好的做法吗?

3 个答案:

答案 0 :(得分:1)

关于你的上一个问题,简单的解决方案是创建StuffController,然后在此控制器中拥有和indexAction,这将是在访问网址www.mysite.com/Stuff时执行的

现在关于何时应该创建控制器或只是向现有控制器添加操作,您必须知道自己想要做什么。将控制器视为应用程序功能的容器。如果您需要具有某种功能,需要针对各种请求提供许多不同的响应,您应该创建一个控制器并为各种请求添加操作。

如果您只需要响应,那么您应该将操作添加到相应的容器(Controller)。

不要将控制器和操作混合到URL的外观。你可以通过路线来操纵它。

http://www.asp.net/mvc/tutorials/controllers-and-routing/creating-custom-routes-cs

答案 1 :(得分:0)

这个问题的答案是主观的。在不修改路线的情况下,您需要创建一个StuffController,其行为为Index,以便解析该网址。所以我想说在Stuff上创建HomeController操作的一个缺点就是你需要修改默认路由以便这样做。

答案 2 :(得分:0)

www.mysite.com/Stuff没有指出一种行动方法。它会查找名为StuffController且具有Index操作的控制器。这完全取决于您在global.asax文件中定义的路线。

添加以下路线以将操作放入HomeController

routes.MapRoute(
                name: "Stuff",
                url: "Stuff/{id}",
                defaults: new {controller = "Home", action = "Stuff", id = UrlParameter.Optional }
                );

将Stuff操作放在不同的控制器中使用此路径

routes.MapRoute(
                name: "Stuff",
                url: "Stuff/{id}",
                defaults: new {controller = "Your Controller", action = "Stuff", id = UrlParameter.Optional }
                );

编辑:要回答关于设计的其他问题,我认为在一个控制器中操作并使用另一个控制器进行操作是一个糟糕的设计实践,因为您可能也将操作方法​​放在您想要的控制器中作为URL。据我说它没有意义。虽然有时可能取决于业务。