OWIN 为WebAPI 宿主 跨平台

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

OWIN 为WebAPI的更多相关文章

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

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

  2. 使用OWIN作为WebAPI的宿主

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

  3. 使用OWIN 为WebAPI 宿主 跨平台

    OWIN是什么? OWIN的英文全称是Open Web Interface for .NET. 如果仅从名称上解析,可以得出这样的信息:OWIN是针对.NET平台的开放Web接口. 那Web接口是谁和 ...

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

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

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

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

  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. ZooKeeper安装与运行

    ZooKeeper安装与运行 首先从官网下载ZooKeeper压缩包,然后解压下载得到的ZooKeeper压缩包,发现有“bin,conf,lib”等目录.“bin目录”中存放有运行脚本:“conf目 ...

  2. XML语法规范

    1: 怎样声明一个xml文件 答:由2部分组成 声明部分,声明xml的版本号与编码(版本号仅仅有1.0) <? xml version="1.0" encoding=&quo ...

  3. 【剑指offer】q34:丑数

    题目要求第n个丑数.所以对于中间结果不须要保存. def Humble(index): curHum = 1 M2 = 2; M3 = 3; M5 = 5 while index > 1: cu ...

  4. c语言太easy笔误的,这将做

    调试发现时间写的一样NB代码 test.c int add(string); int main() { char* p = "11222"; add(p); return 0; } ...

  5. 【OpenCV新手教程之十三】OpenCV图像金字塔:高斯金字塔、拉普拉斯金字塔与图片尺寸缩放

    本系列文章由@浅墨_毛星云 出品,转载请注明出处. 文章链接:http://blog.csdn.net/poem_qianmo/article/details/26157633 作者:毛星云(浅墨) ...

  6. Codeforces Round #246 (Div. 2) D. Prefixes and Suffixes(后缀数组orKMP)

    D. Prefixes and Suffixes time limit per test 1 second memory limit per test 256 megabytes input stan ...

  7. linux+nginx+mysql+php

    LNMP(linux+nginx+mysql+php)服务器环境配置   一.简介 Nginx是俄罗斯人编写的十分轻量级的HTTP服务器,Nginx,它的发音为 “engine X”, 是一个高性能的 ...

  8. JavaScript模板引擎

    JavaScript模板引擎实例应用   在之前的一篇名为<移动端基于HTML模板和JSON数据的JavaScript交互>的文章中,我向大家说明了为什么要使用JavaScript模板以及 ...

  9. 在Sublime Text3中运行PHP代码

    一.前言 最近由于工作需要要与第三方系统对接,另外由于文档中关于其中几个接口就只有很简单的描述,弄了半天都没有弄成功.跟第三方负责的人沟通后还是没有找到具体问题出在哪里,另外因为他们没有开发人员懂.n ...

  10. 服务器编程入门(4)Linux网络编程基础API

      问题聚焦:     这节介绍的不仅是网络编程的几个API     更重要的是,探讨了Linux网络编程基础API与内核中TCP/IP协议族之间的关系.     这节主要介绍三个方面的内容:套接字( ...