写在前面:

除了使用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. FIRMWARE BUG – THE BIOS HAS CORRUPTED HW-PMU RESOURCES

    If you’re trying to install CentOS 7 on HP server and you receive the error from the caption, don’t ...

  2. 获取邮箱使用情况、以及最后一次logon时间

    # 每天收发邮件数 # https://gallery.technet.microsoft.com/scriptcenter/Count-sent-and-recceived-f9c66cf7 # 获 ...

  3. Plickers——教师拿手机、学生拿卡片,就可以完成即时全员互动!

    全员互动.立刻反馈.无设备添加.无能耗增加,风靡全球教育界,杭州师范大学硕士生导师杨俊锋教授推荐!老师拿手机,学生拿卡片就可以完成!      操作方法:      1.注册:登录www.plicke ...

  4. css -理解盒模型

    标准模式: 总宽度/高度=width/height+padding+border+margin 怪异模式(quirks 模式): 总宽度/高度=width/height + margin = 内容区宽 ...

  5. js调试工具及微博登录分析

    js调试工具 网页 都是采用ajax  需要提交一些参数 断点 自己去直接断点 事件断点, network 方法 靠近边栏顶部的是Call Stack(调用堆栈)窗格.当代码在断点处暂停时,Call ...

  6. 【Windows 7】发现一个奇怪的现象

    最近在Windows7-32位操作系统上发现一个奇怪的现象,不知道64位操作系统上会不会发生这个现象.这个现象就是:如果系统上的一个或多个账户没有设置密码,那么在此条件下终止winlogon.exe进 ...

  7. 随手用JQ写个选项卡

    <div class="box"> <ul> <li class="one">选项卡1</li> <li& ...

  8. Chapter07 链表(下):如何轻松学出正确的链表代码?

    技巧一:理解指针或引用的含义 技巧二:指针丢失和内存泄漏 技巧三:利用哨兵简化实现难度 技巧四:重点留意边界条件处理 如果链表未空时,代码是否能够正常运行 如果链表只包含一个节点时,代码能否正常运行 ...

  9. [java,2019-01-15] word转pdf

    word转pdf jar包 <dependency> <groupId>org.docx4j</groupId> <artifactId>docx4j& ...

  10. 2018-2019-2 20165205 《网络对抗》 Exp5 MSF基础

    2018-2019-2 20165205 <网络对抗> Exp5 MSF基础 实验内容 本实践目标是掌握metasploit的基本应用方式,重点常用的三种攻击方式的思路.具体需要完成: 1 ...