OWIN是什么?

OWIN的英文全称是Open Web Interface for .NET。

如果仅从名称上解析,可以得出这样的信息:OWIN是针对.NET平台的开放Web接口。

那Web接口是谁和谁之间的接口呢?是Web应用程序与Web服务器之间的接口,OWIN就是.NET Web应用程序与Web服务器之间的接口。

为什么需要这样一个接口呢?因为.NET Web应用程序是运行于Web服务器之中的,.NET Web应用程序需要通过Web服务器接收用户的请求,并且通过Web服务器将响应内容发送用户。如果没有这样一个接口,.NET Web应用程序就要依赖于所运行的具体Web服务器,比如ASP.NET应用程序要依赖于IIS。有了这个接口,ASP.NET应用程序只需依赖这个抽象接口,不用关心所运行的Web服务器。

所以,OWIN的作用就是通过引入一组抽象接口,解耦了.NET Web应用程序与Web服务器,再次体现了接口的重要性。在软件开发中,每次解耦都是一次很大的进步。

【进一步的理解】

OWIN是对ASP.NET Runtime的抽象。

ASP.NET 5.0是OWIN的一种实现。

通过下面几张图可以更直观地理解:

了解了一些基础理论,下面我们来实际开发。

OWIN Self-Host ASP.NET Web API 2

首先我们创建一个空的控制台项目:

然后通过Nuget来安装 Microsoft.AspNet.WebApi.OwinSelfHost

我们也可以打开NuGet控制台..输入命令:Install-Package Microsoft.AspNet.WebApi.OwinSelfHost

然后我们再添加一个OWIN启动类名为Startup 如下:

Startup中编写代码如下:

using Owin;
using System;
using System.Web.Http; namespace OwinBlog
{
public class Startup
{
public void Configuration(IAppBuilder appBuilder)
{
HttpConfiguration config = new HttpConfiguration();
config.Routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "api/{controller}/{id}",
defaults: new { id = RouteParameter.Optional }
); appBuilder.UseWebApi(config);
}
}
}

下面我们编写一个WebAPI的控制器,代码如下:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Net;
using System.Net.Http;
using System.Web.Http; namespace OwinBlog
{
public class BlogController : ApiController
{
// GET api/<controller>
public IEnumerable<string> Get()
{
return new string[] { "linezero", "owin linezero blog" };
} // GET api/<controller>/5
public string Get(int id)
{
return string.Format("owin {0} by:linezero",id);
} // POST api/<controller>
public void Post([FromBody]string value)
{
} // PUT api/<controller>/5
public void Put(int id, [FromBody]string value)
{
} // DELETE api/<controller>/5
public void Delete(int id)
{
}
}
}

最后我们启动OWIN,在Program.cs 加入以下代码:

using Microsoft.Owin.Hosting;
using System; namespace OwinBlog
{
class Program
{
static void Main(string[] args)
{
string baseAddress = "http://localhost:9000/";
//string baseAddress = "http://+:9000/"; //绑定所有地址,外网可以用ip访问 需管理员权限
// 启动 OWIN host
WebApp.Start<Startup>(url: baseAddress);
Console.WriteLine("程序已启动,按任意键退出");
Console.ReadLine();
}
}
}

启动控制台程序,然后访问我们刚才设置的地址:

http://localhost:9000/api/blog

http://localhost:9000/api/blog/88

跨平台

通过OWIN宿主ASP.NET WebAPI还可以完美的兼容Mono 3 及以上版本。

下面我们就来看看一下运行在linux下。首先大家要安装好 mono。

可以参考:http://www.cnblogs.com/linezero/p/4774850.html

测试系统版本:centos 6.4  mono 3.10.0

将OWIN 启动绑定改为绑定所有地址,然后编译。代码如下:

using Microsoft.Owin.Hosting;
using System; namespace OwinBlog
{
class Program
{
static void Main(string[] args)
{
string baseAddress = "http://+:9000/"; //绑定所有地址,外网可以用ip访问
// 启动 OWIN host
WebApp.Start<Startup>(url: baseAddress);
Console.WriteLine("程序已启动,按任意键退出");
Console.ReadLine();
}
}
}

将程序上传到linux 下,然后定位到程序目录,通过命令启动程序:mono OwinBlog.exe

程序已成功启动,下面我来访问看看:

参考链接:

http://www.cnblogs.com/dudu/p/what-is-owin.html

http://www.cnblogs.com/shanyou/p/3650705.html

http://www.asp.net/web-api/overview/hosting-aspnet-web-api/use-owin-to-self-host-web-api

感谢dudu 站长,以及善友兄。

  如果你觉得本文对你有帮助,请点击“推荐”,谢谢。

使用OWIN 为WebAPI 宿主 跨平台的更多相关文章

  1. OWIN 为WebAPI

    OWIN 为WebAPI 宿主 跨平台 OWIN是什么? OWIN的英文全称是Open Web Interface for .NET. 如果仅从名称上解析,可以得出这样的信息:OWIN是针对.NET平 ...

  2. Visual Studio 2015 Owin+MVC+WebAPI+ODataV4+EntityFrawork+Identity+Oauth2.0+AngularJS 1.x 学习笔记

    2016年,.net 会有很多大更新 ASP.NET 5 在此之前我都是用着古老的.net做开发的 (WebForm + IIS) 为了接下来应对 .net 的新功能,我特地去学习了一下基本的 MVC ...

  3. 使用OWIN作为WebAPI的宿主

    前言 好吧,也没什么好说的,就是个技术的总结,直接生成MVC的项目,感觉好重,虽然各种东西很全 ...也许我是处女座? - -, OWIN呃,这里我就不解释了,自己也是一知半解,可以参考 Open W ...

  4. 控制台+Owin搭建WebAPI接口服务

    当没有iis环境.想快速启动几个api接口测试又觉得新建一个api项目麻烦?来使用控制台做宿主,快速改几个api测试吧! 1.新建控制台项目 2.安装以下相关依赖 Microsoft.AspNet.W ...

  5. 使用Owin的WebApi,并分离Controllers

    1.新建空白web项目 2.添加新建项=>OWIN Startup类(此时会自动下载owin,放在Packages里) 3.在Startup中输入 public void Configurati ...

  6. owin,webapi中将文件写入到response stream中

    首先在controller项目中添加一个类: using System; using System.Collections.Generic; using System.IO; using System ...

  7. Visual Studio 2015 Owin+MVC+WebAPI+ODataV4+EntityFrawork+Identity+Oauth2.0+AngularJS 1.x 学习笔记之"坑"

    1.AngularJS route 与 MVC route http://www.cnblogs.com/usea/p/4211989.html public class SingleRoute : ...

  8. ASP.NET Linux部署(2) - MS Owin + WebApi + Mono + Jexus

    ASP.NET Linux部署(2) - MS Owin + WebApi + Mono + Jexus 本文承接我的上一篇博文: ASP.NET 5 Linux部署,那篇文章主要是针对最新的ASP. ...

  9. webapi框架搭建-创建项目(三)-webapi owin

    上一篇:创建项目(二) 在上一篇里,我们已经创建好了webapi应用,并已经部署到iis里,本篇讲如何用owin自宿主或是iis宿主来部署webapi应用. owin介绍 传统的asp.net网站只能 ...

随机推荐

  1. TypeScript - 基本类型系统

    对于程序来说我们需要基本的数据单元,如:numbers, strings, structures, boolean 等数据结构.在TypeScript中我们支持很多你所期望在JavaScript中所拥 ...

  2. [.net 面向对象编程基础] (17) 数组与集合

    [.net 面向对象编程基础] (17) 数组与集合 学习了前面的C#三大特性,及接口,抽象类这些相对抽象的东西以后,是不是有点很累的感觉.具体的东西总是容易理解,因此我们在介绍前面抽象概念的时候,总 ...

  3. Node.js使用fs.renameSync报cross-device link not permitted错误

    在Node.js中,我们可以使用formidable模块来轻松地实现文件上传功能,代码如下: var Q = require('q'); var util = require('util'); var ...

  4. mac命令

    mac下卸载nodesudo rm -rf /usr/local/{bin/{node,npm},lib/node_modules/npm,lib/node,share/man/*/node.*}xc ...

  5. Andrew Ng机器学习公开课笔记 -- 支持向量机

    网易公开课,第6,7,8课 notes,http://cs229.stanford.edu/notes/cs229-notes3.pdf SVM-支持向量机算法概述, 这篇讲的挺好,可以参考   先继 ...

  6. Ajax技术使用

    <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding= ...

  7. 学习ASP.NET MVC(一)——我的第一个ASP.NET MVC应用程序

    学习ASP.NET MVC系列: 学习ASP.NET MVC(一)——我的第一个ASP.NET MVC应用程序 学习ASP.NET MVC(二)——我的第一个ASP.NET MVC 控制器 学习ASP ...

  8. cordova添加platform

    cordova添加platform 一般需要指定版本的 cordova platform add android@4.1

  9. 使用XSD校验Mybatis的SqlMapper配置文件(1)

    这篇文章以前面对SqlSessionFactoryBean的重构为基础,先简单回顾一下做了哪些操作: 新建SqlSessionFactoryBean,初始代码和mybatis-spring相同: 重构 ...

  10. LLBL Gen Template Studio 2.x

    Template Studio for LLBLGen Pro released Today we released Template Studio, a full-featured IDE for ...