webapi框架搭建系列博客

上一篇:创建项目(二)
在上一篇里,我们已经创建好了webapi应用,并已经部署到iis里,本篇讲如何用owin自宿主或是iis宿主来部署webapi应用。

owin介绍

传统的asp.net网站只能部署在iis下,缺点是网站应用和服务器(即iis)耦合,这样便导致一个简单的请求在最终到达我们自己写的业务代码之前还要经过一系列iis自带的各种modules和handlers及其它的机制(asp.net request pipeline),在我的开发经验中就经常遇到各种iis的问题导致一个简单的请求访问失败的情况。
现在的owin规范可以很好的解决这个问题,对owin的介绍和了解请参考:owin官网(http://owin.org/)和微软对owin规范的实现(https://docs.microsoft.com/zh-cn/aspnet/aspnet/overview/owin-and-katana/)

以iis为宿主

步骤
引入Microsoft.Owin.Host.SystemWeb
  这个包的目的是将到达iis的请求转发到owin管道
此包只有一个程序集:Microsoft.Owin.Host.SystemWeb.dll
此包依赖于:Microsoft.Owin和Owin包
创建Startup.cs文件
代码如下
using Microsoft.Owin;
using Owin;
using System.Threading.Tasks;
// 标识webapiOwin.Startup类为owin的启动类,也可写在AssemblyInfo.cs文件里
[assembly: OwinStartup(typeof(webapi.Owin.Startup))]namespace webapi.Owin
{public class Startup{/// <summary>/// owin的http请求管道配置函数/// </summary>/// <param name="app"></param>public void Configuration(IAppBuilder app){// 有关如何配置应用程序的详细信息,请访问 https://go.microsoft.com/fwlink/?LinkID=316888app.Run(context =>{context.Response.Write("这个owin管道");return Task.FromResult(0);});}}
}

  编译后测试接口地址:http://localhost:101/api/test

如上图结果,和”创建项目(二)“中的请求地址是一样的:http://localhost:101/api/test,但返回的结果却不是TestController.Get方法里的,证明request请求并没有经过webapi,而是进入到owin的管道。
补充:
  如果将网站目录bin下的Microsoft.Owin.Host.SystemWeb.dll删除,同样访问接口地址:http://localhost:101/api/test,返回的是webapi接口里的处理的结果(和创建项目(二)一样),由此可得出结论:Microsoft.Owin.Host.SystemWeb.dll会将拦截到的iis里的请求转到owin管道,如果没有了此dll,请求会照旧用asp.net pipeline。
总结:
1、引用Microsoft.Owin.dll和Owin.dll程序集,编写owin的Startup类。
在Startup类的Configuration函数里写owin 的middlewares
2、引用Microsoft.Owin.Host.SystemWeb.dll
3、完成
iis接收到的请求怎么最终进入到了我们的owin middlewares里,完全交给Microsoft.Owin.Host.SystemWeb.dll去处理了。

owin自宿主

  owin的四大结构为Host,Server,Middleware,Application。用自宿主的方式可完全抛开iis。

步骤
创建console应用

引用Microsoft.Owin.SelfHost包
注意会安装其它的依赖包,Microsoft.Owin.Hosting,Owin,Microsoft.Owin.Diagnostics,Microsoft.Owin.Host.HttpListener,Microsoft.Owin
编写控制台代码

using Microsoft.Owin.Hosting;
using System;namespace MyOwinSelfHost
{class Program{static void Main(string[] args){// WebApp.Start<Startup>和WebApp.Start都可以用,建议用后者,这样通用性强。OwinHost.exe就是用这种方法// 区别为:// 如用WebApp.Start<Startup>则要引用Startup类所在的项目// 如用WebApp.Start,则生成的控制台程序的当前目录下要有含[assembly: OwinStartup(xxx)]才能正常运行//using (WebApp.Start<Startup>("http://localhost:12345"))using (WebApp.Start("http://localhost:12345")){Console.ReadLine();}}}
}

  

运行

1、将编译的控制台程序(MyOwinSelfHost.exe)放入到网站的bin目录下,注意要将控制台程序里的相关dll文件也拷贝到webapi项目里
2、双击MyOwinSelfHost.exe,运行控制台程序(此时控制台程序里什么都没有,也不会自动退出的,图就不上了)
3、用postman返回接口接口地址:http://localhost:123456/api/test (注意,现在已经不是iis里的网站地址了,完全是由控制台程序“新建”的一个“网站”),结果如下
当然,如果不想自己写宿主,也可以用微软已经写好的owinhost.exe,请参考另一篇博客owinhost.exe用法
  上面两个标题的内容讲的是如何用owin技术,当然owin技术的四大结构的细节没有讲,我的重点是梳理owin技术是如何和iis及自宿主(selfhost)交互,而owin里的其它技术细节会在后面的专题里介绍。可以看到,我们用iis宿主和自宿主(selfhost)都已经实现了一个接口类网站应用的雏形(但访问的接口地址没有进入webapi 的action里),下面介绍webapi如何和owin技术结合。

owin和webapi

参考官方文档:

https://docs.microsoft.com/zh-cn/aspnet/web-api/overview/hosting-aspnet-web-api/use-owin-to-self-host-web-api

步骤

引入 Microsoft.AspNet.WebApi.OwinSelfHost
  注意:Microsoft.AspNet.WebApi.OwinSelfHost包里本身没有含任何dll的,nuget里只是提供了一个快捷引入webapi和owin所需所有包的快捷方式。本质上是要引用Microsoft.Owin.Hosting包,Microsoft.Owin.Host.HttpListener包,Microsoft.AspNet.WebApi.Owin包。不要被“OwinSelfHost"的名字所误导。
在owin里加入webapi middleware
Startup.cs代码如下
 public void Configuration(IAppBuilder app){// 有关如何配置应用程序的详细信息,请访问 https://go.microsoft.com/fwlink/?LinkID=316888app.UseWebApi(WebApiConfig.OwinWebApiConfiguration(new HttpConfiguration()));}

WebApiConfig如下,只要看OwinWebApiConfiguration方法里的就行

using System.Web.Http;namespace webapi.Configs
{/// <summary>/// webapi 配置类/// </summary>public static class WebApiConfig{/// <summary>/// 做为委托提供给System.Web.Http.GlobalConfiguration.Configuration()/// 用于webapi以iis为服务器的情况/// </summary>/// <param name="config"></param>public static void Register(HttpConfiguration config){// Web API 配置和服务// Web API 路由config.MapHttpAttributeRoutes();config.Routes.MapHttpRoute(name: "DefaultApi",routeTemplate: "api/{controller}/{id}",defaults: new { id = RouteParameter.Optional });}/// <summary>/// 返回webapi的httpconfiguration配置/// 用于webapi应用于owin技术时使用/// </summary>/// <returns></returns>public static HttpConfiguration OwinWebApiConfiguration(HttpConfiguration config){config.MapHttpAttributeRoutes();//开启属性路由config.Routes.MapHttpRoute(name: "DefaultApi",routeTemplate: "api/{controller}/{id}",defaults: new { id = RouteParameter.Optional });return config;}}
}

运行

编译后,不管是以iis宿主的方式还是以自宿主的方法托管webapi网站,都能访问TestController.cs的Get()接口方法,结果如下:
1、部署在iis下
postman访问接口地址 (get方法):http://localhost:101/api/test
postman测试的返回结果:"this is TestController.Get()"
2、双击”MyOwinSelfHost.exe“,部署webapi应用
postman访问接口地址 (get方法):http://localhost:123456/api/test
postman测试的返回结果:"this is TestController.Get()"

转载于:https://www.cnblogs.com/shengyu-kmust/p/8258693.html

webapi框架搭建-创建项目(三)-webapi owin相关推荐

  1. 一步一步使用ABP框架搭建正式项目系列教程之本地化详解

    返回总目录<一步一步使用ABP框架搭建正式项目系列教程> 本篇目录 扯扯本地化 ABP中的本地化 小结 扯扯本地化 本节来说说本地化,也有叫国际化.全球化的,不管怎么个叫法,反正道理都是一 ...

  2. ExtAspNet学习-利用AppBox框架快速创建项目(五)—完成项目含源代码

    我们前边四个部分已经完成了框架需要的基础配置, 现在我们来完成项目 1.Subsonic 配置,首先在OraSurvey.DAO中添加App.config配置相关信息 View Code 1 < ...

  3. C#项目实战WebApi框架搭建以及部署WebApi服务器的几种方式

    1. Api接口的定义: API应用程序编程接口是一些预先定义的接口,目的是提供应用程序与开发人员基于某软件或硬件得以访问一组例程的能力,而又无需访问源码,或理解内部工作机制的细节. 操作系统想了一个 ...

  4. SSM框架搭建及项目实战

    (可通过图片水印查看博客地址) 1.基本概念 1.1.Spring Spring是一个开源框架,Spring是于2003 年兴起的一个轻量级的Java 开发框架,由Rod Johnson 在其著作Ex ...

  5. CGB2005 JT-1(jt概述 SqlYog 物理模型图PD 表结构 pom文件标签说明 jt环境搭建 创建项目2种,创建各种文件 idea导入,打包,删除项目,启动原理)

    注意事项: 1.京淘项目概述和动吧项目缺点描述 2.把sql文件导入数据库:通过SqlYog可视化工具或者Dos命令窗口. 3.SqlYog说明,和制作物理模型图的工具pd用发. 4.表结构学习 5. ...

  6. 从零开始搭建SpringBoot项目(三)——小程序Uni-app项目搭建(详细教程和实战)

    前情回顾 从零开始搭建SpringBoot项目(一)--开发环境搭建 从零开始搭建SpringBoot项目(二)--Swagger接口测试平台搭建 目录 前情回顾 一.前置条件 二.本篇介绍 三.获取 ...

  7. 自学Python第二十二天- Django框架(一)创建项目、APP、快速上手、请求和响应流程、模板、数据库操作

    Django 框架是一个基于 python 的重量级的 web 开发框架,现今很多大公司大项目都是使用 Django 框架.采用了 MVC(model view controller) 的框架模式,p ...

  8. 基于若依框架搭建商业项目

    RuoYi 若依官方网站 |后台管理系统|权限管理系统|快速开发框架|企业管理系统|开源框架|微服务框架|前后端分离框架|开源后台系统|RuoYi|RuoYi-Vue|RuoYi-Cloud|RuoY ...

  9. SpringMVC(SSM)框架搭建JavaWeb项目时,前端页面文件上传,后台Java下载功能实现及相关问题记录说明

    看在前面:前端页面通过input控件实现文件上传,后台Java使用SpringMVC框架的实现网上有较多教程,但是真正配置一遍下来不报错的较少,所以本博客前面先介绍一遍完整的设置步骤,然后介绍遇到的一 ...

最新文章

  1. PHP分页类(较完美)
  2. 实现java多线程的3种方式,99%人没用过第3种
  3. 这些高校竟因名字太“坑爹”被误会为三本?盘点九所实力强劲但被名字耽误的大学...
  4. mybatis字符串转成数字_Python字符串三种格式化输出
  5. 用例设计工具PICT — 输入组合覆盖
  6. 清理垃圾代码bat_电脑一键清理垃圾图文详解
  7. 鲲鹏云实验-Python+Jupyter机器学习基础环境
  8. Python的主要功能是什么?
  9. javascript中组合使用构造函数模式和原型模式创建对象
  10. mysql怎么模拟死锁_mysql 模拟产生死锁
  11. 免费jar包最全下载网站
  12. [ CSOL - CLS ] 活动网站 map area
  13. [Android]SurfaceView绘制奔跑的小人
  14. Java 第十一届 蓝桥杯 省模拟赛 元音字母辅音字母的数量
  15. 编译原理-LL(1)语法分析器
  16. 迎虎年新春诗会—欢迎赐玉 不拘一格
  17. Android仿微信图片编辑处理:文字,马赛克,裁剪,涂鸦,旋转图片等
  18. 余有成人工智能_中国人工智能学会
  19. 详细Redis入门教程
  20. 调试DuerOS的智能语音技能

热门文章

  1. Tbase基础积累二之数据迁移工具dbbridge
  2. 服务器的ip端口加密协议混淆,Obfsproxy - 混淆/加密端口数据
  3. 苹果Mac系统设置任何来源安装第三方软件
  4. Elasticsearch-ais使用方式
  5. java基础-head first java
  6. c++成员函数指针的本质
  7. 【加密】对称加密DES和非对称加密AES、数字签名|非对称加密--公钥和私钥的区别
  8. 模糊查询和sql语句的拼接
  9. remote couldn‘t create file: Read-only file system (remount failed)解决方法
  10. Reverses the digits of an integer mathmatically