C# NancyFx中的动态路由
我需要能够在NancyFx中动态路由。想想一个博客,或者一个动态CMS,它使用url段塞来识别特定的博客/页面。我想,如果它是用NancyFx写的,那么我们也会做类似的事情 由于可能有数千个不同的url段塞(从数据库提取的页面内容),因此预先构建路由表不是最好的方法 在我的C# NancyFx中的动态路由,c#,routing,nancy,C#,Routing,Nancy,我需要能够在NancyFx中动态路由。想想一个博客,或者一个动态CMS,它使用url段塞来识别特定的博客/页面。我想,如果它是用NancyFx写的,那么我们也会做类似的事情 由于可能有数千个不同的url段塞(从数据库提取的页面内容),因此预先构建路由表不是最好的方法 在我的NancyModule的构造函数中,我尝试了以下操作: public HomeModule() { ... foreach (var page in pages) { Get(page.Slug
NancyModule
的构造函数中,我尝试了以下操作:
public HomeModule()
{
...
foreach (var page in pages)
{
Get(page.Slug, args => GetPage(page.Slug));
}
}
这类方法可行,但有以下限制:
HomeModule
:
/
/topic1
/topic2
/topic3
...
(以及任何数量的其他主题,除了下面特别列出的主题),但以下主题有自己的模块来处理它们,即,如果存在使用冲突slug定义的页面/博客文章,则无法访问:
/admin
/gallery
/image
注意:如果可能,我特别希望避免在URL中使用专门的模块段,如
/page/{page slug}
。如果page slug
未在另一个模块中预定义,我希望catch allHomeModule
来处理它。路由在Nancy中加权,这意味着将从不太具体的路由中选择非常具体的路由
如果您定义了:
Get("/admin", ...);
Get("/gallery", ...);
Get("/image", ...);
Get("/{topic}", ...);
对的调用将由更具体的路由进行拾取,该路由为/admin
,而不是不太具体的catch-all路由/{topic}
此外,除非预先定义了一次列表,否则无法动态添加路由,因为这些路由在第一次加载时被解析并缓存,因此只有在第一次请求通过时才进行查找
您不想添加100个特定路由,这将增加查找时间并阻碍性能(如果您关心毫秒)
此处定义了路线权重:
如您所见,一条特定路线的权重为10000,而一条综合路线的权重为1000我不应该在半夜问问题。早上来,看看你的答案,这似乎有点明显。:-)谢谢你的详细解释。