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 microweb 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". 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.

 Versions

The official website is http://nancyfx.org/. The Source Code is available at Github.com/NancyFx.

Source Code

As said in the screenshot above from Nancy's home page, we can install and use the framework in 3 simple steps.

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.

Framework

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

Package Manager

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 packages

Also, Nancy Handler's information will be updated on the web. config. Through these handlers, Nancy runs and executes the application.

Application

So make sure to not tamper with any of these default settings. Now let's add a "Hello World" example.

Write Code

Add a class file and give a name, here the example "MainModule.cs" has the following lines of codes.

using Nancy;
using System;

namespace WebSite2 {
    public class MainModule : NancyModule {
        public MainModule() {
            Get["/"] = parameters => {
                return "<h1>Hello World!</h1><br/><br/><h3>Welcome to C# Corner!</h3><p style='color:orange'>My first Nancy example.</p>";
            };

            Get["/Sample/{yourname}"] = req => {
                return "Hello " + req.yourname;
            };
        }
    }
}

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.

Run the application

It's done, now just hit F5.

Output 1

Get["/"], pointing to the root folder.

Root folder

Output 2

Get[["/Sample/{yourname}"], pointing to a route path.

Route path

We can even define optional values for Capture Segments.

Get["/Sample/{yourname?suthish}"] = req =>
{
    return "Hello " + req.yourname;
};

Capture Segments

Let's stop here, for now, I am still exploring more features and will post more content for Nancy soon.

Hope this helps you all. Post your comments.

Thank You!


Similar Articles