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

时间:2016-05-31 17:16:33

标签: c# asp.net-web-api url-routing nancy

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

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

因此,当我们点击http://<host>:<port>/Happy/时,我们会得到预期的响应。但是,我认为硬编码路由不是一个“非常可维护”的东西(特别是在大型系统上),所以问题是:有没有办法设置一个约定或什么使路由由它各自命名模块名称,所以我不能总是需要扩展/硬编码路由基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 }

        );
    }

1 个答案:

答案 0 :(得分:2)

对你的问题的简短回答是不容错误的。我们不支持南希的路线惯例。

根据我的个人经验,我所处理的每个项目都偏离了MVC中的约定,最终使用了属性路由。这些约定只会让你在你喜欢&#34;等等之前到达目的地,如何再次到达这条路线?&#34;

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

API应定义一次,很少需要更改,如果有的话。定义靠近实现的路径可确保您轻松找到所需内容。

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

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

像这样的东西,所有管理模块都从这里继承,以确保所有路径都以/admin为前缀