Nancy之基于Nancy.Hosting.Self的小Demo
继昨天的Nancy之基于Nancy.Hosting.Aspnet的小Demo后,
今天来做个基于Nancy.Hosting.Self的小Demo。
关于Self Hosting Nancy,官方文档的介绍如下
https://github.com/NancyFx/Nancy/wiki/Self-Hosting-Nancy
文档具体的内容我就不一一翻译了,主要是演示从头到尾的一个过程,然后看看Nancy.Hosting.Self的源码
一、新建一个控制台应用程序(Console Application)
二、通过NuGet添加我们需要的Nancy包

这里我们可以直接添加Nancy.Hosting.Self,添加这个会顺带添加Nancy。
到这里我们的基本工作就KO了。
三、打开Program.cs,开始写代码了
class Program
{
static void Main(string[] args)
{
using (var nancySelfHost = new NancyHost(new Uri("http://localhost:8888/")))
{
nancySelfHost.Start();
Console.WriteLine("NancySelfHost已启动。。");
try
{
Console.WriteLine("正在启动 http://localhost:8888/ ");
System.Diagnostics.Process.Start("http://localhost:8888/");
Console.WriteLine("成功启动 http://localhost:8888/ ");
}
catch (Exception)
{
}
Console.Read();
}
Console.WriteLine("http://localhost:8888 已经停止 \n NancySelfHost已关闭。。");
}
}
Program.cs
这里实例化了一个新的NancyHosting,并直接用Process.Start打开了一个网页。
这样做是为了省时省力偷下懒,不用在启动程序之后再手动去打开浏览器去输入http://localhost:8888
如果不熟悉Process,可以看一下这个
https://msdn.microsoft.com/en-us/library/e8zac0ca(v=vs.110).aspx
四、新建一个Modules文件夹,用来存放我们的Modules
在Modules文件夹新建一个HomeModule.cs
public class HomeModule:NancyModule
{
public HomeModule()
{
Get["/"] = _ => "I'm from Nancy.Hosting.Self!";
}
}
HomeModule.cs
运行一下,看看效果

正是我们要的结果。下面来看看视图有没有问题。
五、建一个Views文件夹,用于存放视图
新建Home文件夹,新建index.html,这里我们就不用Razor了,Nancy支持多种视图引擎!!这个很不错。
<!DOCTYPE html>
<html lang="en" xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta charset="utf-8" />
<title>NancyDemo</title>
</head>
<body>
<p style="font-size:xx-large">SelfHostingDemo</p>
</body>
</html>
index.html
同时对HomeModule.cs进行修改
public class HomeModule:NancyModule
{
public HomeModule()
{
Get["/"] = _ =>
{
return View["index"];
}; }
}
HomeModule.cs
运行试试。oh no~~ 出错了。。。

为什么会出现错误呢?不应该啊!!
既然有错误,就要排除错误,看看它说那里有问题:
Nancy.RequestExecutionException: Oh noes! ---> Nancy.ViewEngines.ViewNotFoundException: Unable to locate view 'index'
Currently available view engine extensions: sshtml,html,htm
Locations inspected: views/Home/index-zh-CN,views/Home/index,Home/index-zh-CN,Home/index,views/index-zh-CN,views/index,index-zh-CN,index
Root path: D:\GithubCode\Demos\NancyDemoWithSelfHosting\SelfHostingDemo\SelfHostingDemo\bin\Debug
If you were expecting raw data back, make sure you set the 'Accept'-header of the request to correct format, for example 'application/json' 提示的居然是没有找到视图!!再细细看一下就会发现问题了。Root path!!!!
视图应该在放到Debug目录下,这里建的是控制台应用程序,不是web应用程序。
所以就把Views文件夹搬家到Debug下面。
运行看看,OK,成功了
六、把这个demo放到linux下看看 在 /var/www/ 下面新建一个文件夹 mkdir nancydemo
将程序bin目录下的文件传到 /var/www/nancydemo 中,ls看一下里面的内容
执行 mono SelfHostingDemo.exe
看看效果,OK!到这里,已经完成了一个简单的Demo了。 趁着时间还早,看看Nancy.Hosting.Self的内部实现,源码地址:
https://github.com/NancyFx/Nancy/tree/master/src/Nancy.Hosting.Self
还记得否?我们的Program.cs中有用到这个类----NancyHost
var nancySelfHost = new NancyHost(new Uri("http://localhost:8888/"))
细细看看这个类里面有什么东西。
https://github.com/NancyFx/Nancy/blob/master/src/Nancy.Hosting.Self/NancyHost.cs
有六个重载,其实这六个重载都是为了初始化 NancyHost ,有三个是用了默认配置,有三个是用了自定义配置。
我们用到的NancyHost是采用的默认配置,参数就是一个可变的Uri数组。
然后看看Start 方法
主要是监听我们的请求,这个监听过程主要用到了HttpListener,还有异步回调。
里面的 Task.Factory.StartNew 可以看看msdn的介绍
https://msdn.microsoft.com/en-us/library/dd321439(v=vs.110).aspx
持续降温。。注意保暖。。
Nancy之基于Nancy.Hosting.Self的小Demo的更多相关文章
- Nancy之基于Self Hosting的补充小Demo
前面把Hosting Nancy with ASP.NET.Self Hosting Nancy和Hosting Nancy with OWIN 以demo的形式简单描述了一下. 这篇是为Self H ...
- Nancy之基于Nancy.Owin的小Demo
前面做了基于Nancy.Hosting.Aspnet和Nancy.Hosting.Self的小Demo 今天我们来做个基于Nancy.Owin的小Demo 开始之前我们来说说什么是Owin和Katan ...
- 一个基于ES6+webpack的vue小demo
上一篇文章<一个基于ES5的vue小demo>我们讲了如何用ES5,vue-router做一个小demo,接下来我们来把它变成基于ES6+webpack的demo. 一.环境搭建及代码转换 ...
- Nancy之基于Nancy.Hosting.Aspnet的小Demo
近来学习了一下Nancy这个框架,感觉挺好用的,就写篇简单的文章记录一下大致用法,由于是刚接触,写的代码 可能不规范,也没有具体的分层..莫吐槽... Nancy的官网:http://nancyfx. ...
- 一个基于ES5的vue小demo
由于现在很多vue项目都是基于ES6开发的,而我学vue的时候大多是看vue官网的API,是基于ES5的,所以对于刚接触项目的我来说要转变为项目的模块化写法确实有些挑战.因此,我打算先做一个基于ES5 ...
- 基于FPGA的飞机的小游戏
基于FPGA的飞机的小游戏 实验原理 该实验主要分为4个模块,采用至上而下的设计方法进行设计.由50M的晶振电路提供时钟源,VGA显示控制模块.图形显示控制模块.移动模块的时钟为25M,由时钟分频电路 ...
- 基于HTML5实现五彩连珠小游戏
今天给大家分享一款基于HTML5实现五彩连珠小游戏.这款游戏的规则:点击彩球移动到期望的位置,每移动一次,画面将随机出现3个新的彩球:当同一颜色的彩球连成5个一行或一列或一斜线时,这5个彩球同时消失, ...
- 基于Shiro,JWT实现微信小程序登录完整例子
小程序官方流程图如下,官方地址 : https://developers.weixin.qq.com/miniprogram/dev/framework/open-ability/login.html ...
- CRMEB系统就是集客户关系管理+营销电商系统,能够真正帮助企业基于微信公众号、小程序实现会员管理、数据分析,精准营销的电子商务管理系统。可满足企业新零售、批发、分销、等各种业务需求。
**可以快速二次开发的开源小程序商城系统源码**源码开源地址:https://github.crmeb.net/u/LXT 项目介绍: CRMEB系统就是集客户关系管理+营销电商系统,能够真正帮助企业 ...
随机推荐
- Python黑帽编程2.5 函数
Python黑帽编程2.5 函数 写了几节的基础知识,真心感觉有点力不从心.这块的内容说实话,看文档是最好的方式,本人的写作水平,真的是找不出更好的写法,头疼.简单带过和没写一样,写详细了和本系列教程 ...
- Spring学习记录(九)---通过工厂方法配置bean
1. 使用静态工厂方法创建Bean,用到一个工厂类 例子:一个Car类,有brand和price属性. package com.guigu.spring.factory; public class C ...
- 研究一下javascript的模块规范(CommonJs/AMD/CMD)
最近写react需要使用nodejs作为开发环境,需要通过npm安装一些第三方的依赖库,因此慢慢感觉到nodejs基础薄弱对我带来了一些不安全感,尤其是javascript模块这一块听到了很多概念,比 ...
- C++类的静态成员详解
类的静态成员分为静态数据成员和静态成员函数 静态数据成员 假如我们要设计一个战争游戏,游戏中有许多的兵种.游戏的过程中,每隔一段时间每个兵种都会产生,同时由于战争的消耗,每个兵种士兵的数量又会减少.为 ...
- Index的填充属性:FillFactor 和 PAD_INDEX
在Create Index时,必须考虑属性FillFactor 和 PAD_INDEX的设置,这两个属性只在create index 或 rebuild index时起作用,表示Index page( ...
- Panorama和Pivot的区别
Panorama 1.提供了更丰富的用户体验(建议最多4个Items项) 2.Item可以设置屏幕方向为水平,支持多于一个屏幕的显示 3.可以使用任意大小的背景图片,Panorama会自动地缩放为屏幕 ...
- jQuery控制tabs打开的数量
- px、dp与sp的区别以及换算
1.px 即像素,1px代表屏幕上的一个物理像素点. 2.dp dip:device independent pixels(设备独立像素),dp与dip一样,不同的设备有不同的显示效果,一般为了支持W ...
- Android启动icon切图大小
我们在给app切图的时候不知道告诉ui启动图标切多大,其实你新建一个android项目就知道应该切多大了.新建一个项目会产生几种大小的启动图标. 我把各个文件夹下的ic_launcher.png文件都 ...
- 应用程序框架实战十八:DDD分层架构之聚合
前面已经介绍了DDD分层架构的实体和值对象,本文将介绍聚合以及与其高度相关的并发主题. 我在之前已经说过,初学者第一步需要将业务逻辑尽量放到实体或值对象中,给实体“充血”,这样可以让业务逻辑高度内聚, ...


到这里,已经完成了一个简单的Demo了。
趁着时间还早,看看Nancy.Hosting.Self的内部实现,源码地址: