OWIN轻量型框架介绍
静态路由的3种写法
伪静态路由的支持
处理Form表单提交的文件
流式处理Post请求的数据
多种请求类型自动识别
响应处理
请求响应上下文
自定义默认处理函数
内置各种便捷函数
复合类型的请求处理
静态内容的支持
跨域Post的支持
基础类型继承灵活处理
引言什么是OWIN,我就不介绍了,请自行搜索,这里主要是介绍自行开发的OWIN框架的特点和用法。由于.NET的web框架都比较庞大,导致性能总是不高,所以我才想到要在新出的OWIN协议基础上,开发一个高性能的框架,追求极限的性能,绝不发展为一个复杂低效的框架,这是这套框架的初衷。目前功能还不是很全,只能提供WebApi的功能,Razor模板要下个版本再考虑。
如果你是一个注重程序运行效率,而不是编程方便的人,这个框架会很适合你。它在提供最高效率的同时,也极大方便了编程开发。
下载地址:https://github.com/qldsrx/OwinFramework
框架的特色我用过ServiceStack,看过Nancy的代码风格,这两个框架广受好评(但性能不行),特别是编程风格上面,于是我效仿了它们。目前框架中的序列化部分,还有使用ServiceStack_V3的dll,但由于ServiceStack非常不厚道,自从收费后,免费版本的最后一个版本删了几个常用方法,收费版本直接命名空间大变样,升级直接导致项目出错,因此最终会全部自己实现,不用ServiceStack的类库。
该框架最低要求.net4.0环境,因为需要Task类的支持。
如何启动调试的时候可以用自承载方式,方法和Nancy的一样,但win7以上系统需要管理员权限启动,代码如下:
static void Main(string[] args) { var url = "http://+:8080"; using (WebApp.Start<OwinLight.Startup>(url)) { Console.WriteLine("Running on {0}", url); Console.WriteLine("Press enter to exit"); Console.ReadLine(); } }
项目最终部署推荐使用Linux+Jexus,因为Jexus会优先处理静态资源,而我的这个框架是不处理静态资源的,如果用IIS部署,需要设置经典模式并自行配置静态路径的处理映射。
* jexus部署方法:
* 1、编译得到OwinLight.dll(也可以自行改名)。
* 2、将编译得到的dll连同Owin.dll、Microsoft.Owin.dll等文件
* 一同放置到网站的bin文件夹中
* 3、在对应网站的jws网站配置文件中加入一句,声明要使用的适配器:
* OwinMain=OwinLight.dll,OwinLight.Startup
* 4、重启Jexus让配置生效。
* TinyFox部署方法:
* 1、编译得到OwinLight.dll(也可以自行改名)。
* 2、将编译得到的dll连同Owin.dll、Microsoft.Owin.dll等文件
* 一同放置到网站的bin文件夹中(site\wwwroot\bin)
* 3、默认配置文件为TinyFox.exe.config,也可以在site\wwwroot下面放web.config,优先读取web.config
* 4、运行fox.bat或fox.sh(linux),端口在启动脚本里。
各项功能 静态路由的3种写法
首先来看下这样的写法:
public Demo1() { //定义静态路径处理函数,Any表示任意请求类型,Get表示只对GET请求处理,Post表示只对POST请求处理 Any["http://www.mamicode.com/"] = GetRoot; }
这和Nancy里面里面是类似的,提供了Any、Get、Post三种属性来定义路径处理函数,不同的是,我的这个函数必须是Func<IOwinContext, Task>形式的,而不接受任何dynamic的参数。这里IOwinContext是web请求响应上下文,包含了请求和响应的各种信息。
下面就看下GetRoot函数的示例:
public Task GetRoot(IOwinContext context) { var x = new TaskCompletionSource<object>(); x.SetResult(null); //调用SetResult后,这个服务即转为完成状态 context.Response.ContentType = "text/html; charset=utf-8"; HttpHelper.WritePart(context, "<h1 style=‘color:red‘>您好,Jexus是全球首款直接支持MS OWIN标准的WEB服务器!</h1>"); return x.Task; }
看到这里,你也许会觉得,这样写太麻烦了。是的,但是某些特殊场合会用的到,因此提供了这样的写法。下面介绍POCO参数方式的编程,和ServiceStack很像,但是更实用。
温馨提示: 本文由Jm博客推荐,转载请保留链接: https://www.jmwww.net/file/70806.html
- 上一篇:c#代码抓取本地QQ号,很实用哦
- 下一篇:c#之Async、Await剖析