C# 使用同一端点/控制器的多个实体类型
我在应用程序中使用RavenDB,默认情况下,文档的id如下所示:C# 使用同一端点/控制器的多个实体类型,c#,asp.net-mvc-4,asp.net-web-api,asp.net-mvc-routing,ravendb,C#,Asp.net Mvc 4,Asp.net Web Api,Asp.net Mvc Routing,Ravendb,我在应用程序中使用RavenDB,默认情况下,文档的id如下所示: homes/1 其中homes是类Home的集合类型名称。如果我创建一个名为Blog的新类,我将得到一个id,如: blogs/1 现在,Home和Blog都是我的CMS中的页面,我希望homes/1和blogs/1都使用PageController。因此,是否可以使用约束或类似的东西来实现这一点,因为只有继承特定类的类型才由PageController端点处理很重要?您有两个不同的选项 如果它是一个页面控制器,并且用户
homes/1
其中homes
是类Home
的集合类型名称。如果我创建一个名为Blog
的新类,我将得到一个id,如:
blogs/1
现在,
Home
和Blog
都是我的CMS中的页面,我希望homes/1
和blogs/1
都使用PageController
。因此,是否可以使用约束或类似的东西来实现这一点,因为只有继承特定类的类型才由PageController
端点处理很重要?您有两个不同的选项
如果它是一个页面控制器
,并且用户正在执行创建和编辑页面之类的对象,那么主页
和博客
可能不应该有两种单独的实体类型。应该有一个页面
类。它可以有一个PageType
属性来区分它们,但它们可能不需要是单独的对象。如果采用这种方法,RavenDB中的文档将具有键pages/1
如果有明显不同的字段,那么可能您确实有一个
Home
和Blog
类,但是它们都应该从页面
类继承,并且任何共同属性都应该在那里。如果您采用这种方法,您仍然可以在RavenDB中获得带有键的文档,如homes/1
和blogs/1
。您可能想看看RavenDB中的多态性。使用这种方法,您可能仍然需要一个PagesController
,或者您可能需要单独的HomePagesController
和BlogPagesController
,具体取决于您的需要。实体类型my上的字段差别很大。我同意你的观点,我认为最好的解决方案是为每个类型创建一个控制器
,这在我创建所有类的正常情况下都会起作用。在本例中,我创建了Page
类和一个多映射索引,该索引对继承Page
的所有类型进行索引。另一个开发人员使用my CMS创建站点,创建主页
和博客
类。在我的CMS的UI中,内容编辑器应该能够编辑和保存所有主页
s、博客
s等。因此,我认为我需要为所有页面设置一个页面控制器
。因此,您是否遇到了一个与您当前的方法不兼容的特定问题?如果我使用带破折号的标识策略而不是正斜杠,它会起作用,因为这样我最终会得到像page/homes-1这样的URL,这非常有效。我问这个问题的原因之一是因为我正在尝试实现像这样的文档草稿homes/1/draft,但我想homes-1-draft可以很好地工作,尽管它看起来没有那么好。但是您知道,如果扩展我的页面
类并向其添加更多字段,我在保存时会遇到问题,因为没有控制器
处理您创建的类型
?