使用ASP.NET创建web项目时,一般选择就是ASP.NET的网站应用类型或是web form应用程序类型,不然就是mvc模式。今天介绍一个完全脱离这些类型的.NET框架--Nancy。Nancy框架可以用来处理DELETE、GET、HEAD、OPTIONS、POST、PUT 和PATCH 的请求,并使用了一种简单的、优雅的及DSL的处理方式。
你可以在Nancy的官网了解到更多:http://nancyfx.org/
安装Nancy前,需要先安装MonoDevelop的AddIn---NuGet(关于NuGet)。
打开MonoDevelop,选 择“工具”=》“Add in Manager”。在弹出的对话窗口中,选择“Galley”的Tab页,下拉选择“Manage Repositories”。然后添加一个安装源。
若是MonoDevelop3.0.5,请使用以下地址:
http://mrward.github.com/monodevelop-nuget-addin-repository/3.0.5/main.mrep若是MonoDevelop 4.0,请使用以下地址:
http://mrward.github.com/monodevelop-nuget-addin-repository/4.0/main.mrep添加完成后,点击刷新按键,可以看到nuget插件已在列表中:
选中后,点击右侧底下的安装按钮,这样就成功的把NuGet安装到MonoDevelop中去了。
Nancy框架是可以宿主在ASP.NET的Web框架或MVC框架中的。本文将使用MVC作业 Nancy的宿主。
新建一个项目,我这边将解决方案取名为FirstNancy,把web项目取名为FirstNancy.Web。当解决方案新建完成后,就可以Nuget的管理菜单
在弹出的窗口中,搜索框里输入nancy,添加Nancy、Nancy.Hosting.Aspnet两个组件到解决方案中,这时会在项目中自动添加两个引用:Nancy.dll和Nancy.Hosting.Aspnet.dll。
除了添加两个Nancy的引用外,添加操作还会修改Web.config里的httpHandlers模块,这时,你还得手动修改,把之前的MVC的httpHandlers注释掉,最后变成,如下代码:
<httpHandlers> <!-- <remove verb="*" path="*.asmx" /> <add verb="*" path="*.asmx" validate="false" type="System.Web.Script.Services.ScriptHandlerFactory, System.Web.Extensions, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" /> <add verb="*" path="*_AppService.axd" validate="false" type="System.Web.Script.Services.ScriptHandlerFactory, System.Web.Extensions, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" /> <add verb="GET,HEAD" path="ScriptResource.axd" type="System.Web.Handlers.ScriptResourceHandler, System.Web.Extensions, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" validate="false" /> <add verb="*" path="*.mvc" validate="false" type="System.Web.Mvc.MvcHttpHandler, System.Web.Mvc, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />--> <add verb="*" type="Nancy.Hosting.Aspnet.NancyHttpRequestHandler" path="*" /> </httpHandlers>
public class MvcApplication : System.Web.HttpApplication
{
public static void RegisterRoutes (RouteCollection routes)
{
// routes.IgnoreRoute ("{resource}.axd/{*pathInfo}");
//
// routes.MapRoute (
// "Default",
// "{controller}/{action}/{id}",
// new { controller = "Home", action = "Index", id = "" }
// );
}
public static void RegisterGlobalFilters (GlobalFilterCollection filters)
{
filters.Add (new HandleErrorAttribute());
}
protected void Application_Start ()
{
AreaRegistration.RegisterAllAreas ();
RegisterGlobalFilters (GlobalFilters.Filters);
RegisterRoutes (RouteTable.Routes);
}
}
using System; using Nancy; namespace FirstNacy.Web { public class DefaultModule : NancyModule { public DefaultModule () { Get ["/"] = paramaters => { return "<h1>Hello Nancy page!</h1>"; }; Get["/mult/{a}/{b}"] = paramaters => { int a,b; int.TryParse(paramaters.a.ToString(), out a); int.TryParse(paramaters.b.ToString(), out b); return string.Format("<h3>a * b = {0}</h3>", (a * b).ToString()); }; } } }
访问带参数的页面,如下:
将上述的应用程序放置Ubuntu服务器上,报了错。原因是找不到System.Web.WebPages程序集。
后来查到张善友前辈的博客《在mono 3.0 下运行ASP.NET 4网站的主意事项》后,在站点的web.config中,修改了System.Web.WebPages的相关配置,运行成功。
<assemblies> ... <add assembly="System.Web.WebPages, Version=2.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" /> ... </assemblies>
所有有版本号为1.0.0.0的,都要改成2.0.0.0
<appSettings> <add key="webpages:Version" value="2.0.0.0" /> ... </appSettings>
使用Nancy和Simple.Data两个轻量级的框架打造一个分布式开发系统(一)
在mono 3.0 下运行ASP.NET 4网站的主意事项