ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

owin使用

2020-07-27 23:02:21  阅读:266  来源: 互联网

标签:Web string System 使用 using NET owin 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

 

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

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

标签:Web,string,System,使用,using,NET,owin,OWIN
来源: https://www.cnblogs.com/Alex80/p/13388245.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有