原文: Nancy 寄宿OWin 一:建立一個空項目

Install-Package Nancy
Install-Package Nancy.Owin
Install-Package Microsoft.Owin
install-package Nancy.ViewEngines.Razor
三:建好的項目圖
四:RazorConfig類的内容及作用
using System.Collections.Generic;
using Nancy.ViewEngines.Razor;
namespace NancyMvc.Config
{
/// <summary>
/// Razor配置,如果你需要使用 cshtml,這個配置比較重要,當然,也可以在這兒加入其它的類
/// </summary>
public class RazorConfig: IRazorConfiguration
{
/// <summary>
/// 需加載的程式集清單
/// </summary>
/// <returns></returns>
public IEnumerable<string> GetAssemblyNames()
{
//加了這句,才能處理 cshtml
yield return "System.Web.Razor";
}
/// <summary>
/// 需要添加到cshtml中的名字空間
/// </summary>
/// <returns></returns>
public IEnumerable<string> GetDefaultNamespaces()
{
yield return "System.Web.Razor";
}
/// <summary>
/// 是否自動引用model名字空間
/// </summary>
public bool AutoIncludeModelNamespace
{
get { return true; }
}
}
}
五:SiteRootPath 内容及作用,不可少,不然項目有錯誤
using System;
using Nancy;
namespace NancyMvc.Config
{
/// <summary>
/// 提供網站實體路徑的類
/// </summary>
public class SiteRootPath : IRootPathProvider
{
/**************************************************************
* TinyFox Owin Server 預設情況下
* 網站是放在 TinyFox 程序所在檔案夾下的site/wwwroot中的
* ----------------------------------------------------------
* 如果你把 NancyFx 的 Views 頁放在其它的地方,應該作相應修改
*******************************************************************/
/// <summary>
/// 網站根檔案夾實體路徑(for tinyfox)
/// </summary>
// static readonly string _RootPath = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "site", "wwwroot");
// (for Jexus Web Server or Host in ASP.NET),如果自定義root後需要使用
static readonly string _RootPath = AppDomain.CurrentDomain.GetData(".appPath").ToString();
/// <summary>
/// 擷取網站或WEB應用的根檔案夾的實體路徑
/// </summary>
/// <returns></returns>
public string GetRootPath()
{
return _RootPath;
}
}
}
六:MainModule的内容與作用
using System;
using System.Collections.Generic;
using System.Drawing;
using NancyMvc.Filter;
namespace NancyMvc.Controller
{
public class MainModule: BaseNancyModule
{
/// <summary>
/// 構造函數
/// </summary>
public MainModule()
{
//在構造函數中進行路由配置
Get["/home"] = UserFont;
}
private dynamic UserFont(dynamic arg)
{
//顯示cshtml頁
return View["Home/index"];
}
}
}
七:BaseNancyModule 的内容與作用
using System;
using System.Collections.Generic;
using System.Linq;
using Nancy;
namespace NancyMvc.Filter
{
public class BaseNancyModule: NancyModule
{
public BaseNancyModule()
{
//請求之前
Before += context =>
{
return null;
};
//請求之後
After += context =>
{
context.Response.ContentType = "text/html;charset=utf-8";
};
}
}
}
八:MyStatusHandler
using Nancy;
using Nancy.ErrorHandling;
using Nancy.ViewEngines;
namespace NancyMvc.Handler
{
/// <summary>
/// 自定義http status處理類
/// </summary>
public class MyStatusHandler : IStatusCodeHandler
{
private IViewRenderer viewRenderer;
public MyStatusHandler(IViewRenderer viewRenderer)
{
this.viewRenderer = viewRenderer;
}
/// <summary>
/// 具體處理過程
/// </summary>
/// <param name="statusCode"></param>
/// <param name="context"></param>
public void Handle(HttpStatusCode statusCode, NancyContext context)
{
var response = viewRenderer.RenderView(context, "Status/404");
response.StatusCode = statusCode == HttpStatusCode.NotFound ? HttpStatusCode.OK : statusCode;
context.Response = response;
}
/// <summary>
/// 目前狀态是否需要自己處理
/// </summary>
/// <param name="statusCode"></param>
/// <param name="context"></param>
/// <returns></returns>
public bool HandlesStatusCode(HttpStatusCode statusCode, NancyContext context)
{
//return false;
return (statusCode == HttpStatusCode.NotFound
//|| statusCode == HttpStatusCode.ServiceUnavailable
//|| statusCode == HttpStatusCode.InternalServerError
);
}
}
}
九:Adapter
using System;
using System.Collections.Generic;
using System.Threading.Tasks;
using Microsoft.Owin.Builder;
namespace NancyMvc
{
class Adapter
{
static Func<IDictionary<string, object>, Task> _owinApp;
/// <summary>
/// 預設構造函數
/// </summary>
public Adapter()
{
var builder = new AppBuilder();
var startup = new Startup();
startup.Configuration(builder);
_owinApp = builder.Build();
}
/// <summary>
/// *** JWS所需要的關鍵函數 ***
/// </summary>
/// <param name="env">新請求的環境字典,具體内容參見OWIN标準</param>
/// <returns>傳回一個正在運作或已經完成的任務</returns>
public Task OwinMain(IDictionary<string, object> env)
{
//如果為空
if (_owinApp == null) return null;
//将請求交給Microsoft.Owin處理
return _owinApp(env);
}
}
}
十:Startup
using Owin;
namespace NancyMvc
{
public class Startup
{
public void Configuration(IAppBuilder builder)
{
builder.UseNancy();
}
}
}
十一:配置properties
啟動外部程式是tinyfox的包 下載下傳位址http://linuxdot.net/down/tinyfox-2.3.tar.gz)
指令行參數中的 -p 8083是你配置的端口号 -root 後面的是你目前項目的位置,不需要配到bin
本文章主要參考來源 http://www.cnblogs.com/gaobing/p/4969581.html