C#使用Owin技术部署轻量级webApi服务
写在前面:
除了使用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服务的更多相关文章
- 基于flask的轻量级webapi开发入门-从搭建到部署
基于flask的轻量级webapi开发入门-从搭建到部署 注:本文的代码开发工作均是在python3.7环境下完成的. 关键词:python flask tornado webapi 在python虚 ...
- 快速部署业务类为webapi服务
接着前一篇博文,将接口快速打包固定请求格式,不需要修改代码,可以自动完成接口调用,实际上就是生成了一个接口的代理类. 那么仅仅是接口请求代理,没有服务端怎么行?所以需要将实现接口的类部署为webapi ...
- 《2016ThoughtWorks技术雷达峰会----微服务架构》
微服务架构 王键,ThoughtWorks, 首席咨询师 首先微服务架构的定义,thoughtWorks在2012年3月的技术雷达中这样定义: “微服务架构是一种架构,它提倡将单一应用程序划分为一 ...
- Asp.Net WebApi服务的创建
Web API一种REST架构风格的Web服务.所谓的REST架构与技术无关,而是面向资源的一种软件架构设计. WCF自3.5之后也提供了对REST风格的支持,但和WebAPI来比较显得较为笨重,We ...
- 用 Java 技术创建 RESTful Web (服务 JAX-RS:一种更为简单、可移植性更好的替代方式)
作者: Dustin Amrhein, 软件工程师, IBM Nick Gallardo, 软件工程师, IBM 出处: http://www.ibm.com/developerworks/cn/we ...
- 第16章 使用Squid部署代理缓存服务
章节概述: 本章节从代理缓存服务的工作原理开始讲起,让读者能够清晰理解正向代理(普通模式.透明模式)与反向代理的作用. 正确的使用Squid服务程序部署代理缓存服务可以有效提升访问静态资源的效率,降低 ...
- 开箱即用Bumblebee独立部署搭建webapi网关详解
在之前的章节里都是讲述如何在程序中使用Bumblebee来构建一个Webapi网关:但这样显然有些麻烦,毕竟很多时候可能只需要一个简单负载处理,还需要写个程序针对服务进行编写代码或配置的确是比较麻烦的 ...
- ASP.NET WebApi服务接口如何防止重复请求实现HTTP幂等性
一.背景描述与课程介绍 明人不说暗话,跟着阿笨一起玩WebApi.在我们平时开发项目中可能会出现下面这些情况; 1).由于用户误操作,多次点击网页表单提交按钮.由于网速等原因造成页面卡顿,用户重复刷新 ...
- .net core 微服务架构-docker的部署-包括网关服务(Ocelot)+认证服务(IdentityServer4)+应用服务(asp.net core web api)
本文主要介绍通过Docker来部署通过.Net Core开发的微服务架构,部署的微服务主要包括统一网关(使用Ocelot开发).统一认证(IdentityServer4).应用服务(asp.net c ...
随机推荐
- CentOS 7 install Tensorflow-gpu
# install TensorFlow GPU on CentOS 7.0# https://www.server-world.info/en/note?os=CentOS_7&p=tens ...
- MapperScan和ComponentScan同时使用问题
@MapperScan:1.首先了解@Mapper 在接口上添加了@Mapper,在编译之后就会生成相应的接口实现类. 不过需要在每个接口上面进行配置,为了简化开发,就有了 @Mapper ...
- 常用LINQ关键字用法汇总
背景 传统上,针对数据的查询都以简单的字符串表示,而没有编译时类型检查或 IntelliSense 支持.此外,还需要针对每种数据源学习一种不同的查询语言:SQL 数据库.XML 文档.各种 Web ...
- HUE安装过程中的一些坑
1. gcc: error: krb5-config:: No such file or directory 执行安装krb5-devel yum provides krb5-config 得到提示: ...
- ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/var/lib/mysql/mysql.sock' (13)解答
我在使用mysqll客户端连接我的mysql服务器的时候,出现了上述的问题.我的操作系统是ubuntu,安装版本是对应的64位服务器.我的服务器的启动方式是sudo service mysql sta ...
- python科学计算包numpy用法(一)
numpy是python中一个用来做科学计算的包,用起来十分方便,下面是我总结的numpy的用法: 1.如何创建矩阵 创建矩阵有很多种方法,主要包括以下几种: 通过array函数创建 >> ...
- 软件测试:lab1.Junit and Eclemma
软件测试:lab1.Junit and Eclemma Task: Install Junit(4.12), Hamcrest(1.3) with Eclipse Install Eclemma wi ...
- echarts统计图Y轴(或X轴)文字过长问题解决
echarts 统计图Y轴文字过长 在使用echarts时,出现数值非常大,Y轴又显示不下的情况就需要压缩Y轴数值刻度. 解决方法: yAxis: { type: 'value', axisLabel ...
- HTML基础篇
由于一些原因,要换工作了,毫无准备,心情郁闷了几天.但是还是更新了简历,准备复习面试.面 了3天.面试中问到了一些问题,想好好整理一下.越是大公司越看重基础.这几天遇到的面试题,有15到简答题,有两页 ...
- Btrace官方教程-中文版
教程英文版来源:https://github.com/btraceio/btrace/blob/master/docs/usersguide.html BTrace用户指南 BTrace是一种安全,动 ...