NancyFx - a light weight .NET framework

Who is Nancy?

 
NancyFx or Nancy is a .NET platform (built with the .NET framework client profile) open-source project developed by Andreas Hakansson (aka @TheCodeJunkie), and Steven Robbins; this open-source is inspired by the Sinatra web framework built on Ruby.
 
As we know, the ASP.Net framework is somewhat too heavy to handle, so Nancy is definitely made for MVC developers and can develop extremely fast web applications. Nancy is a lightweight framework or micro web framework for building HTTP based services on .Net (also Mono). Here HTTP based services mean that this framework can handle all standard HTTP methods like GET, POST, PUT, DELETE, HEAD, etc... Everything in Nancy is "HOST's". A Host acts as a framework or adapter for a hosting environment and enables Nancy to run on existing technologies such as ASP.NET, WCF, etc.
 
The app should be downloaded and installed through the NuGet package manager because this will download all complete references to your current solution or project.  The current version is 0.16.1, we can see a list of old versions below.
 
Nancy-Framework1.jpg
 
The official website is http://nancyfx.org/. The Source Code is available at Github.com/NancyFx.
 
Nancy-Framework2.jpg
 
As said in the screenshot above from Nancy's home page, we can install and use the framework in 3 simple steps.
 
Getting Started: Install packages
 
Let's start exploring this framework. Open Visual Studio, and then create an "ASP.Net Empty Web Site" from "File" -> "New" -> "Project..." -> Web Site.
 
Now we need to install the Nancy Framework before starting coding, for that first ensure that the NuGet Packager is installed for your Visual Studio.
 
Nancy-Framework3.jpg
 
Once NuGet is installed, open the "Package Manager Console" from "Tools" -> "Library Package Manager" and run the following commands one after another. We can select the default project to which the installation should happen.
 
PM > Install-Package Nancy
PM > Install-Package Nancy.Hosting.Aspnet
 
Nancy-Framework4.jpg
 
We will get a successful installation message. And at the same time another new file named packages.config will be added to the project. This file contains the framework version information. Whenever we add more Nancy packages this file will be updated with those new lists.
 
Nancy-Framework5.jpg
 
Also, Nancy handler's information will be updated into the web.config. Through these handlers, Nancy runs and executes the application.
Nancy-Framework6.jpg
 
So make sure to not tamper with any of these default settings. Now let's add a "Hello World" example.
 
Getting Started: Write Code
 
Add a class file and give a name, here the example "MainModule.cs" has the following lines of codes.
  1. using Nancy;  
  2. using System;  
  3.   
  4. namespace WebSite2 {  
  5.     public class MainModule: NancyModule {  
  6.         public MainModule() {  
  7.             Get["/"] = parameters => {  
  8.                 return "<h1>Hello World!</hi><br/> <br/ ><h3>Welcome to C# Corner!</h3><p style='color:orange'>My first Nancy example.</p>";  
  9.             };  
  10.   
  11.             Get["/Sample/{yourname}"] = req => {  
  12.                 return "Hello " + req.yourname;  
  13.             };  
  14.         }  
  15.     }  
Code Explained
 
The "NancyModule" class is referenced from the Nancy library and inherited into "MainModule". Like Controllers in MVC, there are Modules in Nancy. A Module defines the behavior of the application. A single Module must be defined for a Nancy application, which is the starting point of an application. We can create any number of Modules inherited from NancyModule. MainModule is the constructor having two routes defined, Get["/"] and Get["/Sample/{yourname}"].  GET, POST, PUT, DELETE, HEAD, etc. are Methods supported by Nancy.  A Route must follow an exact pattern's like Literal segments ("/Sample/}"), Capture segments ({yourname}), and Regular Expressions.
 
Getting Started: Run the application
 
It's done, now just hit F5.
 
Output 1 -> Get["/"], pointing to the root folder.
 
Nancy-Framework7.jpg
 
Output 2 -> Get[["/Sample/{yourname}"], pointing to a route path.
 
Nancy-Framework8.jpg
 
We can even define optional values for Capture Segments.
  1. Get["/Sample/{yourname?suthish}"] = req =>  
  2. {  
  3.    return "Hello " + req.yourname;  
  4. }; 
Nancy-Framework9.jpg
 
Let's stop here, for now, I am still exploring more features and will post more contents for Nancy soon.
 
Hope this helps you all. Post your comments.
 
Thank You!