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

Смежные вопросы