使用OWIN托管ASP.NET Web API 2

OWIN全称是Open Web Interface for .NET,是针对.NET平台的开放Web接口。

有了OWIN,就可以让ASP.NET 脱离IIS,不用再去关心Web服务器的事情,这一点在ASP.NET Web API测试中特别方便,当然除了使用OWIN托管,还可以使用内存托管。

那么怎么使用OWIN托管?

0.新建ASP.NET Web API 2项目

ASP.NEt Web API 2出现这么久,除了旧项目,相信不会有人还使用第一版本了吧。我曾经尝试过在老项目添加OWIN托管,特别麻烦各种程序集不兼容,到最后也没成功。所以,不知道OWIN是不是不支持第一版本的API还是别的原因,如果要使用OWIN,建议升级到新版本的API再说。

因为使用OWIN主要是方便单元测试,所是新建项目的时候把”添加单元测试“勾上。

1.添加OWIN引用和Startup.cs启动文件

用nuget添加owin的引用(IAppBuilder在这里):

PM>Install-Package Owin

然后在项目添加Startup.cs:

using System.Web.Http;
using Owin;

namespace OwinHost
{
    public class Startup
    {
        public void Configuration(IAppBuilder appBuilder)
        {
            var config=new HttpConfiguration();
            WebApiConfig.Register(config);

            appBuilder.UseWebApi(config);
        }
    }
}

接着再用nuget添加 Microsoft.AspNet.WebApi.Owin(UseWebApi扩展方法在这里)

PM>Install-Package Microsoft.AspNet.WebApi.Owin

使用nuget添加引用时,如果依赖的程序集版本不兼容,nuget会一并更新引用。
到这里,API项目添加OWIN已经完成,下面开始在单元测试中启动它。

2.在单元测试中启用项目

启动OWIN托管前,还要在测试项目引入Microsoft.Owin.Hosting(WebApp.Start方法在这里)和Microsoft.Owin.Host.HttpListener

PM> Install-Package Microsoft.Owin.Hosting
PM> Install-Package Microsoft.Owin.Host.HttpListener

引用完后添加启动测试代码

namespace OwinHost.Tests
{
    [TestClass]
    public class OwinHostStartTests:IDisposable
    {
        private const string HostAddress = "http://localhost:9000";
        private static IDisposable _webApp;
        private static HttpClient _client;
        public OwinHostStartTests()
        {
            _webApp = WebApp.Start<Startup>(HostAddress);
            _client=new HttpClient();
            _client.BaseAddress=new Uri(HostAddress);
        }

        [TestMethod]
        public void StartTest()
        {
            var response = _client.GetAsync("api/values").Result;

            Assert.AreEqual(HttpStatusCode.OK,response.StatusCode);
            Assert.AreEqual("value1",response.Content.ReadAsAsync<List<string>>().Result.ElementAt(0));
        }

        public void Dispose()
        {
            _webApp.Dispose();
        }
    }
}

结果是顺利通过了

就这么简单的几步,很方便地添加了OWIN托管,极大的方便了测试,完全实现了一键运行测试,不用关心IIS。

3.可能遇到的问题

使用过程中,有可能会有某些程序集依赖版本不兼容问题,直接用nuget升级程序包就好了。

4.小结

添加OWIN托管不会对项目有任何副作用,更不会影响IIS部署,所以尽管放心服用。当然OWIN也直接托管ASP.NET也是没问题的,现在已经有非常完善的组件支持了,可以作为IIS替代方案。

时间: 2024-11-03 21:11:30

使用OWIN托管ASP.NET Web API 2的相关文章

购物车Demo,前端使用AngularJS,后端使用ASP.NET Web API(3)--Idetity,OWIN前后端验证

原文:购物车Demo,前端使用AngularJS,后端使用ASP.NET Web API(3)--Idetity,OWIN前后端验证 chsakell分享了前端使用AngularJS,后端使用ASP.NET Web API的购物车案例,非常精彩,这里这里记录下对此项目的理解. 文章:http://chsakell.com/2015/01/31/angularjs-feat-web-api/http://chsakell.com/2015/03/07/angularjs-feat-web-api-

使用OWIN 构建自宿主ASP.NET Web API 2

--Use OWIN to Self-Host ASP.NET Web API 2 原文链接:http://www.asp.net/web-api/overview/hosting-aspnet-web-api/use-owin-to-self-host-web-api 摘要:ASP.NET Web API 2拥有符合RESTFUL风格,原生支持HTML协议,解耦IIS和windows server服务器等诸多优秀特性.本文讲述如何使用OWIN构建ASP.NET Web API 2.在翻译的基础

Use OWIN to Self-Host ASP.NET Web API 2

Open Web Interface for .NET (OWIN)在Web服务器和Web应用程序之间建立一个抽象层.OWIN将网页应用程序从网页服务器分离出来,然后将应用程序托管于OWIN的程序而离开IIS之外. This tutorial shows how to host ASP.NET Web API in a console application, using OWIN to self-host the Web API framework. Open Web Interface fo

Asp.Net Web API 2第十课——使用OWIN自承载Web API

前言 阅读本文之前,您也可以到Asp.Net Web API 2 系列导航进行查看 http://www.cnblogs.com/aehyok/p/3446289.html 本教程主要来展示在控制台应用程序中如何通过OWIN来承载Web API. Open Web Interface for .NET (OWIN)在Web服务器和Web应用程序之间建立一个抽象层.OWIN将网页应用程序从网页服务器分离出来,然后将应用程序托管于OWIN的程序而离开IIS之外. 本文仍将使用VS2013. 本文的示

ASP.NET Web API与Owin OAuth:使用Access Toke调用受保护的API

在前一篇博文中,我们使用OAuth的Client Credential Grant授权方式,在服务端通过CNBlogsAuthorizationServerProvider(Authorization Server的一个实现)成功发放了Access Token,并在客户端成功拿到了Access Token. 那Access Token有什么用呢?在OAuth中对Resource Server(比如Web API)访问权限的验证都是基于Access Token.不管是什么样的客户端来调用,Reso

JSON Web Token in ASP.NET Web API 2 using Owin

In the previous post Decouple OWIN Authorization Server from Resource Server we saw how we can separate the Authorization Server and the Resource Server by unifying the "decryptionKey" and "validationKey" key values in machineKey node

(转)【ASP.NET Web API】Authentication with OWIN

概述 本文说明了如何使用 OWIN 来实现 ASP.NET Web API 的验证功能,以及在客户端与服务器的交互过程中,避免重复提交用户名和密码的机制. 客户端可以分为两类: JavaScript:可以理解为网页 Native:包括手机 app.windows 客户端等等 步骤 通过用户名和密码,获取 access token,请参考:http://bitoftech.net/2014/06/01/token-based-authentication-asp-net-web-api-2-owi

在ASP.NET Web API 2中使用Owin OAuth 刷新令牌

在上篇文章介绍了Web Api中使用令牌进行授权的后端实现方法,基于WebApi2和OWIN OAuth实现了获取access token,使用token访问需授权的资源信息.本文将介绍在Web Api中启用刷新令牌的后端实现. 本文要用到上篇文章所使用的代码,代码编写环境为VS 2017..Net Framework 4.7.2,数据库为MS SQL 2008 R2. OAuth 刷新令牌 上文已经搞了一套Token授权访问,这里有多出来一个刷新令牌(Refresh Token),平白添加程序

Asp.Net Web API 2 官网菜鸟学习系列导航[持续更新中]

前言 本来一直参见于微软官网进行学习的, 官网网址http://www.asp.net/web-api.出于自己想锻炼一下学习阅读英文文章的目的,又可以学习下微软新发布的技术,其实也很久了,但自己菜鸟一枚,对自己来说都是新技术了.鉴于以上两个原因,本人打算借助google翻译和有道词典,来翻译学习这个系列,并通过博客园来记录自己的翻译学习过程.由于自己阅读水平的确太菜,在借助工具的情况下,有时候搞出来的也是蹩脚的语句,自己读着都难受,尤其是到了Web API路由的那两篇,所以自己想着是不是有别人