NancyFX 中按约定或模块名称命名的路由

Route name by convention or module name in NancyFX

当我们在 NancyFX 应用程序中创建模块时,我们以这种方式进行路由:

public class HappyModule : Nancy.NancyModule
{
    public HappyModule() : base("/Happy")
    {
        Get["/"] = _ => "Received GET request";
    }
}

因此,当我们点击 http://<host>:<port>/Happy/ 时,我们得到了预期的响应。但是,我认为硬编码路由不是 "very-maintainable" 要做的事情(特别是在大型系统上),所以问题是:是否有一种方法可以设置约定或使路由由其各自命名的方法模块名称,所以这样我就不必总是 extend/hard-code 路由基础 NancyModule 构造函数?

我真正想知道的是:是否有类似于我们在ASP.NET WebApi(代码如下)中的路由机制?

    public static void Register(HttpConfiguration config)
    {
        // Web API configuration and services
        config.MapHttpAttributeRoutes();
        config.Routes.MapHttpRoute(
            name: "DefaultApi",
            routeTemplate: "api/{controller}/{action}/{id}",
            defaults: new { id = RouteParameter.Optional }

        );
    }

您的问题的简短回答不是。我们不支持南锡的路线约定。


根据我的个人经验,我从事的每个项目都偏离了 MVC 中的约定,并最终使用了属性路由。在你像 "wait, how do I get to this route again?"

之前,惯例只能让你走这么远

然后您最终会筛选文件,试图找出路由的注册位置。

API 应该被定义一次并且很少需要改变,如果有的话。定义靠近实现的路线可确保您可以轻松找到东西。

基本路径允许您定义网站的区域。例如,您可以为管理区域定义一个抽象模块,而不是到处写 /admin

public abstract class AdminModule : NancyModule
{
    public AdminModule() : base("/admin"){}
    public AdminModule(string path) : base("/admin/" + path.TrimStart('/')){}
}

类似这样,所有管理模块都继承自此以确保所有路径都以 /admin

为前缀