1

我想获得一些关于如何为新站点设置控制器的建议。

该站点将在各个位置设有图书馆,并且每个图书馆都可以拥有一套书籍。

URL 结构如下所示:

/图书馆名称/书籍/书籍名称

这些书也可能有类别或体裁:

/图书馆名称/类别/书籍/书籍名称

我的问题是,我是否只创建一个库控制器,其中包含添加/删除库以及添加和删除书籍的所有逻辑?

或者我要创建一个图书馆控制器和一个书籍控制器?如果是这样,我如何确保书籍“绑定”到特定图书馆?

很抱歉这个简单的问题,但主要教程似乎都没有这样的嵌套路线。

谢谢,罗比

4

3 回答 3

2

查看区域

如果您将拥有在多个控制器中重复的代码,请考虑为该代码创建单独的类和方法,以便您可以遵循DRY原则。

于 2013-04-29T11:11:53.750 回答
2

如果您使用多个物理上独立的库,LibraryName(也许)是有道理的(但会出现一些明显的位置问题)?

请注意,您可能会开始使用此方法遇到路由地狱,但这并非不可能,因此我会先研究并定义您的结构。

使用以下 URI 结构可能会更好:

/libraries/{LibraryName}/books/

获取 libraryName 中的书籍列表

/libraries/{LibraryName}/books/{BookISBN}

通过 ISBN 号获取一本书

/libraries/{LibraryName}/books?category=somecategory

获取某个类别的书籍列表

使用示例路线:

    routes.MapRoute(
        name: "LibraryBooks",
        url: "libraries/{id}/books",
        defaults: new { controller = "Libraries", action = "GetBooks" }
    );

它是 LibrariesController 中的方法:

    public IEnumerable<IBook> GetBooks(string id)
    {
        return new IBook[] { new Book(), new Book() };
    }
于 2013-04-29T11:35:52.977 回答
0

你想显示书籍,所以在我看来你需要一个 BookController 而不是 LibraryController。BookController 根据作为参数传递给 BookController 的图书馆和/或类别来获取特定书籍(或书籍列表)。

如果要正确设置(划分 UI、业务逻辑、数据访问),则应将检索数据的逻辑放在单独的类库中

于 2013-04-29T11:17:09.680 回答