2016-05-31 136 views
1

约定或模块名称当我们创建一个模块NancyFX应用里面,我们做路由这样:路线名称由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

望着文档这似乎并不可能https://github.com/NancyFx/Nancy /维基/定义路由。 –

回答

2

简短的回答你的问题它不会。我们不支持南希的路线惯例。


在我个人的经验,每次我对我的工作项目已经动摇从MVC中的约定,距离结束了使用属性的路由。这些公约只会让你感觉像“等等,然后又怎么走到这条路线上?”。

然后你最终筛选文件试图找出路线注册的地方。

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

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

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

像这样的事情,所有的管理模块,从这个继承,以确保所有路径都带有前缀/admin

+0

我很好奇,如果AdminModule基类定义了一个路由并且一个子类重写了该路由,那么行为是什么 - 当该路由被命中时,处理程序是否总是子类? – riqitang