-3

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

www.mysite.com

www.mysite.com/Stuff

如果我的默认控制器是HomeController,“Stuff”操作应该在什么时候出现HomeController

“东西”行动什么时候应该出现在HomeController

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

4

3 回答 3

1

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

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

如果您只需要在响应时提供服务,那么您应该向适当的容器(控制器)添加一个操作。

不要将控制器和操作与 URL 的外观混合在一起。您可以通过路线来操纵它。

http://www.asp.net/mvc/tutorials/controllers-and-routing/creating-custom-routes-cs
于 2013-07-26T14:03:41.990 回答
0

这个问题的答案是主观的。在不修改路由的情况下,您需要创建一个StuffController带有操作的Index来解析该 URL。因此,我想说在 上创建Stuff操作的一个缺点HomeController是您需要修改默认路由才能以这种方式运行。

于 2013-07-26T14:03:34.443 回答
0

www.mysite.com/Stuff 没有指向操作方法。它寻找一个以 action 命名的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 是一种不好的设计实践,因为您不妨将操作方法​​作为 url 放置在您想要的控制器中。在我看来,这没有意义。虽然有时可能取决于业务。

于 2013-07-26T14:06:38.307 回答