Veremos este framework, bastante parecido a Asp MVC o a las Api’s de .Net pero más ligero y bastante potente. Haremos una miniweb para ver cómo empezar.
¿Qué es?
NancyFx és un FrameWork para .Net que es una alternativa a Asp.Net Mvc y Api. Está basado en Sinatra de Ruby y se encargaría de la comunicación de la web. No te fuerza a usar el patrón MVC, pero te permite utilizarlo.
¿Para qué sirve?
Como hemos dicho, es una alternativa a Asp.Net Mvc y Api. NancyFx no es más que un servicio «endpoint» para responder a las peticiones HTTP mediante los verbos apropiados. Es bastante útil para hacer Webs, WebServices y APIs. Lo bueno que tiene NancyFx es que es muy ligero y potente.
Vamos a ver un ejemplo
Vamos a crear un Hello World! Primero crearemos un proyecto de tipo Asp Empty. Este nos dejará el proyecto vacío, ahora vamos a nuget (encima del proyecto le damos a botón derecho/manage nuget package) y buscamos el Nancy.Hosting.Aspnet y lo instalamos.
Ahora que tenemos las referencias del proyecto, crearemos 2 carpetas: Modules y Views. En Modules tendremos los «Controllers”, agregamos una clase que se llame HomeModule con este contenido:
using Nancy; namespace TestNancy.Modules { public class HomeModule : NancyModule { public HomeModule() { Get["/"] = _ => { dynamic viewBag = new DynamicDictionary(); viewBag.hello = "Hello World!"; return View["ViewBag", viewBag]; };
Como podemos ver, tenemos que heredar de NancyModule y en el constructor metemos las “rutas”, hemos puesto que en la ruta por defecto cree un diccionario y le ponemos una clave con la frase “Hello Word!” y devolvemos una vista llamada “ViewBag” con el diccionario.
La alternativa en MVC o Api sería tocar el fichero de rutas, aquí las puedes definir en el momento y puedes usar las Regular Expresión (Por ejemplo: si queremos que cuando les pasemos un nombre empiece por Z nos muestre otra vista…)
Crearemos dentro del directorio Views la página ViewBag.html con este contenido:
<!DOCTYPE html> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <title>NancyFX</title> </head> <body> @Model.hello </body> </html>
Ahora vamos a añadir 2 modelos, 1 modules y 2 Views.
Models
Vamos a crear los modelos primero, para ello creamos un directorio de Models y allí 2 clases HomeModel y BeerModel:
public class HomeModel { public string Name { get; set; } public string LastName { get; set; } }</pre> <pre class="brush: csharp; gutter: true"> public class BeerModel { public string beerName { get; set; } public string beerCountry { get; set; } }
Modules
Después, en el directorio de Modules, modificamos el HomeModule y añadimos el BeerModule tal que:
public class HomeModule : NancyModule { public HomeModule() { Get["/"] = _ => { return View["home", new Models.HomeModel() { LastName = "kkkk", Name = "oo" }]; }; Get["/test"] = _ => { var a = new List() { new Models.HomeModel() { Name = "Pepe", LastName = "Phone" }, new Models.HomeModel() { Name = "Juan", LastName = "2" }, }; return View["home2", a]; }; } }
Tenemos una función que muestra la pantalla de home, que devuelve un HomeModel y otra que se le llama con un “/test” que devuelve un List de HomeModel en la vista home2.
public class BeerModule : NancyModule { public BeerModule() { Get["/beer"] = _ => { var a = new List() { new Models.BeerModel() {beerCountry = "France", beerName = "Belcebuth" }, new Models.BeerModel() { beerCountry = "Germany", beerName = "Samichlaus" }, }; return View["beer", a]; }; } }
Aquí, cuando hagamos un “/beer” devolverá un List en la vista beer.
Views
Crearemos 2 Views: Home2 y beer:
Home2:
<!DOCTYPE html> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <title>NancyVsMvc.Mvc - Welcome!</title> </head> <body> @Each.Model name: @Current.Name lastname: @Current.LastName @EndEach </body> </html>
Beer:
<!DOCTYPE html> <html xmlns="http://www.w3.org/1999/xhtml"> <body> <h3>Beers</h3> @Each.Model Name: @Current.beerName Contry: @Current.beerCountry @EndEach </body> </html>
En el siguiente veremos cómo utilizar las Regural Expresions con NancyFx