写在前面:

除了使用IIS可以启用WebApi之外,微软还提供了Owin技术,免除了IIS繁琐的部署配置,只需要运行编写好的程序,即可启用webApi服务,是不是很爽呢?

对于Owin技术的详细介绍这里就不多说了,大伙自行百度。

正题:

一、需要大量的Nuget包

主要有:

1、owin

2、owin.hosting

3、webapi.owin

4、owin.host.httplistener

5、webapi.cors

Nuget包之后会自动生成引用

二、创建Startup类

该类用于实现webApi的各项配置

需要引用

using Owin;

using System.Web.Http;
using System.Web.Http.Cors;

using System.Net.Http.Headers;

    public class Startup
{
//需要nuget owin、cors、hosting、listener
// This code configures Web API. The Startup class is specified as a type
// parameter in the WebApp.Start method.
/// <summary>
/// 配置webApi文本格式、路由规则、跨域规则等参数
/// </summary>
/// <param name="appBuilder"></param>
public void Configuration(IAppBuilder appBuilder)
{
// Configure Web API for self-host.
HttpConfiguration config = new HttpConfiguration();
config.Formatters.JsonFormatter.SupportedMediaTypes.Add(new MediaTypeHeaderValue("text/html"));
config.EnableCors(new EnableCorsAttribute("*", "*", "*"));//解决跨域问题,需要nuget Cors
config.Routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "api/{controller}/{id}",
defaults: new { id = RouteParameter.Optional } );
appBuilder.UseWebApi(config);
}
}

三、编写启动WebApi服务的方法

需要引用

using Microsoft.Owin.Hosting;

using System.Net.Http;

        /// <summary>
/// 初始化webApi
/// </summary>
private static void ApiInit()
{
try
{
//端口号
string port = "";
//电脑所有ip地址都启用该端口服务
string baseAddress = "http://+:" + port + "/";
////指定ip地址启用该端口服务
//string baseAddress = "http://192.168.0.70:" + port + "/";
//启动OWIN host
WebApp.Start<Startup>(url: baseAddress);
//打印服务所用端口号
Console.WriteLine("Http服务端口:" + port);
//创建HttpCient测试webapi
HttpClient client = new HttpClient();
//通过get请求数据
var response = client.GetAsync("http://localhost:" + port + "/api/home").Result;
//打印请求结果
Console.WriteLine(response);
Console.WriteLine("Http服务初始化成功!");
}
catch (Exception ex)
{
Console.WriteLine("Http服务初始化失败!");
Console.WriteLine(ex.ToString());
}
}

四、编写webApi测试接口例子

需要引用

using System.Web.Http;

调用的时候url是 http://localhost:9100/api/home

接口的命名规则是:接口名+Controller

    public class HomeController:ApiController
{
public IHttpActionResult Get()
{
return Ok("Hello World!");
}
public void Post([FromBody]string value)
{ }
// PUT api/values/5
public void Put(int id, [FromBody]string value)
{
}
// DELETE api/values/5
public void Delete(int id)
{
}
}

五、调用启动web服务的方法

直接调用 ApiInit();

六、运行结果

1、软件启动后的结果

因为启用的代码中直接请求了home接口所以有返回数据

                //创建HttpCient测试webapi
HttpClient client = new HttpClient();
//通过get请求数据
var response = client.GetAsync("http://localhost:" + port + "/api/home").Result;
//打印请求结果
Console.WriteLine(response);

2、使用浏览器测试结果

url格式是 http://{ip地址}:{端口号}/api/{接口名}/{id参数}

该格式可以通过Startup中的路由规则更改

ip地址:127.0.0.1

本机的ip地址

localhost

post、put等方法就自行测试吧

写在结尾:

主要难点就是各种nuget包的引用,少了其中一个就有可能会报错!

注意:如果在win7及以上的系统提示服务启动失败,需要以管理员身份运行软件来解决!

(完)

原创于:博客园-寒子非

https://www.cnblogs.com/kellen451/p/10615289.html

C#使用Owin技术部署轻量级webApi服务的更多相关文章

  1. 基于flask的轻量级webapi开发入门-从搭建到部署

    基于flask的轻量级webapi开发入门-从搭建到部署 注:本文的代码开发工作均是在python3.7环境下完成的. 关键词:python flask tornado webapi 在python虚 ...

  2. 快速部署业务类为webapi服务

    接着前一篇博文,将接口快速打包固定请求格式,不需要修改代码,可以自动完成接口调用,实际上就是生成了一个接口的代理类. 那么仅仅是接口请求代理,没有服务端怎么行?所以需要将实现接口的类部署为webapi ...

  3. 《2016ThoughtWorks技术雷达峰会----微服务架构》

    微服务架构   王键,ThoughtWorks, 首席咨询师 首先微服务架构的定义,thoughtWorks在2012年3月的技术雷达中这样定义: “微服务架构是一种架构,它提倡将单一应用程序划分为一 ...

  4. Asp.Net WebApi服务的创建

    Web API一种REST架构风格的Web服务.所谓的REST架构与技术无关,而是面向资源的一种软件架构设计. WCF自3.5之后也提供了对REST风格的支持,但和WebAPI来比较显得较为笨重,We ...

  5. 用 Java 技术创建 RESTful Web (服务 JAX-RS:一种更为简单、可移植性更好的替代方式)

    作者: Dustin Amrhein, 软件工程师, IBM Nick Gallardo, 软件工程师, IBM 出处: http://www.ibm.com/developerworks/cn/we ...

  6. 第16章 使用Squid部署代理缓存服务

    章节概述: 本章节从代理缓存服务的工作原理开始讲起,让读者能够清晰理解正向代理(普通模式.透明模式)与反向代理的作用. 正确的使用Squid服务程序部署代理缓存服务可以有效提升访问静态资源的效率,降低 ...

  7. 开箱即用Bumblebee独立部署搭建webapi网关详解

    在之前的章节里都是讲述如何在程序中使用Bumblebee来构建一个Webapi网关:但这样显然有些麻烦,毕竟很多时候可能只需要一个简单负载处理,还需要写个程序针对服务进行编写代码或配置的确是比较麻烦的 ...

  8. ASP.NET WebApi服务接口如何防止重复请求实现HTTP幂等性

    一.背景描述与课程介绍 明人不说暗话,跟着阿笨一起玩WebApi.在我们平时开发项目中可能会出现下面这些情况; 1).由于用户误操作,多次点击网页表单提交按钮.由于网速等原因造成页面卡顿,用户重复刷新 ...

  9. .net core 微服务架构-docker的部署-包括网关服务(Ocelot)+认证服务(IdentityServer4)+应用服务(asp.net core web api)

    本文主要介绍通过Docker来部署通过.Net Core开发的微服务架构,部署的微服务主要包括统一网关(使用Ocelot开发).统一认证(IdentityServer4).应用服务(asp.net c ...

随机推荐

  1. 在ubuntu中屏蔽“检测到系统程序出现问题”对话框

    ubuntu各个版本中都会时常遇到 “检测到系统程序出现问题”对话框 这是由于ubuntu系统中的“Apport”即错误信息的收集报告系统,将所有系统错误告警都不分大小和主次全部通知你,严重影响我们正 ...

  2. 多线程、互斥锁、异步、GIL

    多线程-threading python的thread模块是比较底层的模块,python的threading模块是对thread做了一些包装的,可以更加方便被使用 from threading imp ...

  3. 无需脑图 无需思维导图 看Word大纲视图

    大纲视图可以帮助我们大纲视图可帮助您管理文档的结构和标题,就像现在的脑图,经过我的使用后,可以说Word的分级功能非常强大,只恨当时理解的不够,误会了Word.   当我们决定写一个文档的时候,第一步 ...

  4. 三、thymeleaf模板引擎构建前台html, 后台使用 ModelAndView 和 Model 模型

    项目源码:https://github.com/y369q369/springBoot.git      ->     thymeleaf 私聊QQ: 1486866853 1.pom.xml中 ...

  5. C3D视频特征提取

    一.部署 1. 先把项目Clone下来 git clone https://github.com/jfzhang95/pytorch-video-recognition.git 2. 安装环境: Py ...

  6. 游戏AI

    玩游戏太累了,我或许可以写一个机器人帮我玩游戏发QQ发空间啥的

  7. 记录Redis使用中遇到的两个问题(原子性及数据完整性)

    1.使用Redis作为分布式锁的原子性问题 原方案: ① SETNX $LOCK_BUSI_KEY $REQ_ID ② EXPIRE $LOCK_BUSI_KEY $LOCK_TIME 问题: 使用S ...

  8. django中forms和modelform组件的区别

    首先,我们来看看modelform的实现 model.py class Book(models.Model): title=models.CharField(max_length=32) price= ...

  9. 容器(docker)内运行Nginx

    容器内运行nginx其实很简单,但是一开始还是浪费了我很多时间.这里写下来给大家省点时间. 1.创建nginx文件夹,放置各种配置及日志等. mkdir /docker/nginx docker 文件 ...

  10. ubuntu远程windows桌面

    最近把系统装成了ubuntu,需要远程windows  ,就用到了ubuntu的 rdesktop工具 1.先打开终端输入 rdesktop  看系统是否安装了  rdesktop  如果没有安装需要 ...