2016-05-31 83 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