当我们在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 }
);
}
答案 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
为前缀