Nancy入门

当我们要接到一个新的项目的时候,我们第一时间想到的是用微软的MVC框架,但是你是否想过微软的MVC是不是有点笨重?我们这个项目用MVC是不是有点大材小用?有没有可以替代MVC的东西呢?看到这里也许你会反问我,微软的MVC到底什么地方不好了?这个暂且不说,我们先认识一下Nancy,来了解一下他和MVC的不同。

 一、Nancy简介

  什么是Nancy呢?如果你学习过Ruby的话,就会知道Ruby中有个框架叫做Sinatra,Nancy就是Sinatra的.Net版本。如果你感觉微软的MVC过于笨重、过于繁琐,那么Nancy可能就是你苦苦寻找的东西。

  • Nancy是一个轻量级的独立的框架,下面是官网的一些介绍:
  • Nancy 是一个轻量级用于构建基于 HTTP 的 Web 服务,基于 .NET 和 Mono 平台,框架的目标是保持尽可能多的方式,并提供一个super-duper-happy-path所有交互。
  • Nancy 设计用于处理 DELETEGETHEADOPTIONSPOSTPUT 和 PATCH 等请求方法,并提供简单优雅的 DSL 以返回响应。
  • Nancy和Asp.net MVC原理相似,但有自己的一套路由机制,在使用上更加易用,可以用Nancy快速开发一些网站。
  • Nancy并不依赖任何现有的框架,所以他可以运行在任何平台上面。

  下面是官方文档的一些说明:(个人表示E文不好,自己可以看懂点,翻译出来就感觉不是那么回事了,这里就不献丑了,大家简单看看吧)

  关于super-duper-happy-path,官网也给出了解释,下面是部分内容:

哪位英语好的,给大家翻译下,分享一下哈~~我这里就不废话了!下面给出Nancy的官网地址,大家可以看下:

  Nancy官网地址:http://nancyfx.org/

  GitHub文档地址:https://github.com/NancyFx/Nancy/wiki/Documentation

 二、创建第一个Nancy项目

  下面我们来写一个Nancy的Hello,world项目,来学习一下Nancy的简单使用,打开Visual Studio,新建空Web项目:

选择空模板,点击确定,建好项目以后,接下来我们开始通过Nuget安装Nancy,一共需要安装下面三个包,代码如下:

  Install-Package Nancy   //Nancy

  Install-Package Nancy.Hosting.Aspnet  //Nancy For Asp.net

  Install-Package Nancy.Viewengines.Razor //提供Razor视图支持,感觉很意外吧,我们还可以继续使用Razor

  安装完成后,我们开始搭建项目的基本结构,首先Nancy也是有自己的规则的,Nancy工程中控制器的部分必须放在Modules文件夹中,视图部分必须放在Views文件夹中,所以在项目中添加两个文件夹Modules和Views,再分别添加HomeModule类和Razor页面Home,添加完成后项目结构如图:

View这里先不用,先建好准备着,下面我们来显示Hello,world,打开HomeModule.cs,修改其代码如下:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using Nancy; namespace NancyStudy.Modules
{
public class HomeModule : NancyModule
{
//注意:这里是构造函数
public HomeModule()
{
Get["/"] = parameters => "Hello World";
}
} }

首先我们引入Nancy的命名空间,然后我们的类要继承自NancyModule,在ASP.NET MVC中所有控制器都继承Controller,在Nancy中,同样所有的‘控制器’都必须继承NancyModule类。

注意:在Nancy中,所有的的路由信息都是在构造方法中的,当程序运行时,会遍历所有所有的构造方法,如果出现路由信息相同时,默认选择最后遍历的那一个。

好了,就这么多代码,Views里面的东西先不去管它,我们按F5,运行项目,编译通过,然后再浏览器中输入如下信息:

到这里,我们就成功的写完了Nancy的Hello,world,是不是很简单啊~~

下面,我们来显示刚刚新建的View,我们修改Home.cshtml的内容,如下:

<!DOCTYPE html>
<html>
<head>
<meta name="viewport" content="width=device-width" />
<title>Nancy</title>
</head>
<body>
<div>
<h1>Hello,Nancy!</h1>
</div>
</body>
</html>

在修改我们的构造方法,如下:

 public class HomeModule : NancyModule
{
//注意:这里是构造函数
public HomeModule()
{
Get["/"] = p =>
{
return View["/Home"];
};
}
}

好了,按F5运行,浏览器显示结果如图:

这里要注意的是浏览器地址栏,一定是网站根目录,不是指向我们的Home.cshtml文件,否则会提示找不到页面,如图:

这是因为你在打开Home.cshtml的页面按下了F5,Visual Studio将页面指向了当前编辑页面,这个大家应该都知道的,在这里说明一下,否则在这里搞半天不知道错在哪,是件很郁闷的事。

好了,今天就先说到这里,下一篇继续我们的Nancy学习~~

作者:雲霏霏

博客地址:http://www.cnblogs.com/yunfeifei/

Nancy入门的更多相关文章

  1. .NET轻量级MVC框架:Nancy入门教程(二)——Nancy和MVC的简单对比

    在上一篇的.NET轻量级MVC框架:Nancy入门教程(一)——初识Nancy中,简单介绍了Nancy,并写了一个Hello,world.看到大家的评论,都在问Nancy的优势在哪里?和微软的MVC比 ...

  2. .NET轻量级MVC框架:Nancy入门教程(一)——初识Nancy

    当我们要接到一个新的项目的时候,我们第一时间想到的是用微软的MVC框架,但是你是否想过微软的MVC是不是有点笨重?我们这个项目用MVC是不是有点大材小用?有没有可以替代MVC的东西呢?看到这里也许你会 ...

  3. Nancy和MVC的简单对比

    Nancy和MVC的简单对比 在上一篇的.NET轻量级MVC框架:Nancy入门教程(一)——初识Nancy中,简单介绍了Nancy,并写了一个Hello,world.看到大家的评论,都在问Nancy ...

  4. 轻量级的Web框架——Nancy

    最近想找一个简单的.Net下的轻量级Web框架,作为用户的本地的一个WebServer,实现同浏览器程序的一些简单交互,并调用本地服务,实现类似浏览器插件的功能.它有如下几点要求: 简单,能快速账务, ...

  5. 使用Nancy.Host实现脱离iis的Web应用

    本篇将介绍如何使用Nancy.Host实现脱离iis的Web应用,在开源任务管理平台TaskManagerV2.0代码里面已经使用了Nancy.Host实现自宿主的Web应用.学习Nancy之前最好了 ...

  6. Nancy.Host的Web应用

    Nancy.Host实现脱离iis的Web应用 本篇将介绍如何使用Nancy.Host实现脱离iis的Web应用,在开源任务管理平台TaskManagerV2.0代码里面已经使用了Nancy.Host ...

  7. Nancy简单实战之NancyMusicStore(六):写在最后

    前言 由于公司搬家后,住的地方离上班的地方远了N倍,以前是走路十多分钟就可以到公司的,上班时间也从9:00提早到8:30 现在每天上班都是先坐公交,然后再坐地铁,在这段路上比较浪费时间而且每天都是要6 ...

  8. 转 Katana 项目入门

    Katana 项目入门 Howard Dierking 当 ASP.NET 首次在 2002 年发布时,时代有所不同. 那时,Internet 仍处于起步阶段,大约有 5.69 亿用户,每个用户平均每 ...

  9. Spark入门(七)--Spark的intersection、subtract、union和distinc

    Spark的intersection intersection顾名思义,他是指交叉的.当两个RDD进行intersection后,将保留两者共有的.因此对于RDD1.intersection(RDD2 ...

随机推荐

  1. 读改善c#代码157个建议:建议4~6

    目录: 建议4:TryParse比Parse好 建议5:使用int?确保值类型也可以为null 建议6:区别 readonly 和 const 的用法 一.建议4:TryParse比Parse 好 T ...

  2. Net 项目构建基于Jenkins + Github + Mono 的持续集成环境

    Net 项目构建基于Jenkins + Github + Mono 的持续集成环境 阅读目录 1 安装 2 配置 3 测试 在Redhat enterprise 6.5 的服务器上,为在gutub 上 ...

  3. Think in Java(一):Java基础

    一. OOP的特点 (1) 万物皆为对象; (2) 程序是对象的集合,他们通过发送信息来告诉彼此所要做的; (3) 每一个对象都有自己的由其它对象所构成的存储; (4) 每一个对象都拥有它的类型; ( ...

  4. Codeforces 110B-Lucky String(技能)

    B. Lucky String time limit per test 2 seconds memory limit per test 256 megabytes input standard inp ...

  5. build path--use as source folder 应用

    今天eclipse.当打算run随着main功能class时间,出现editor does not contain a main type该错误框. baidu了一下,迅速解决这个问题:原来这个cla ...

  6. POJ 1026 Cipher(更换)

                                                                   Cipher Time Limit: 1000MS   Memory Li ...

  7. Upgrade Ver 4.3.x from 4.2.x

    级到遇到个小问题.解决细节记录例如以下. [gpadmin@wx60 ~]$ gpmigrator /usr/local/greenplum-db-4.2.7.2 /usr/local/greenpl ...

  8. SQLSERVER复制优化之一《减少包大小》

    原文:SQLSERVER复制优化之一<减少包大小> SQLSERVER复制优化之一<减少包大小> 自从搭了复制之后以为可以安枕无忧了,谁不知问题接踵而来 这次遇到的问题是丢包, ...

  9. 你真的会玩SQL吗?Case的用法(转)

    今天来总结整理一下Case,因为SQL查询中用得最多的逻辑判断. Case具有两种格式.简单Case函数和Case搜索函数. --简单Case函数 CASE sex WHEN '1' THEN '男' ...

  10. 数字使用相应的加密策略传递一个字符串后Java实现代码

    公司采用公用电话传递数据,数据小于8整数位,为了确保安全,     在转移的过程中需要加密,加密规则如下面的:         第一个数据下降,附图然后各加5,和除以10的余数取代该数字,       ...