博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
基于OWIN的WEB API承载
阅读量:6832 次
发布时间:2019-06-26

本文共 4181 字,大约阅读时间需要 13 分钟。

使用VS2013可以直接创建web api,然后承载到IIS中就可以供外部访问。但这样必须依赖于IIS,如果采用OWIN,则不再依赖,仅仅是运行了一个执行程序而已。先来看看效果图。

具体步骤如下

1.新建一个空的web项目,然后使用nuget搜索安装Microsoft.AspNet.WebApi.OwinSelfHost.具体可以参见该文http://www.asp.net/web-api/overview/hosting-aspnet-web-api/use-owin-to-self-host-web-api。

2.构建提供访问的控制器

创建ValuesParamController,注意一定要Controller作为后缀的控制器类。

using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Threading.Tasks;using System.Web.Http;namespace WebApiOwin{    public class ValuesParamController : ApiController    {        ///         /// 获取产品        ///         /// 产品ID        /// 
public String TestProduct(Guid productId) { return productId.ToString(); } /// /// 获取产品 /// /// 产品ID ///
public Product GetProduct(Guid productId) { if (productId == null) { throw new Exception("缺少产品ID"); } Product product = new Product(); product.Id = productId.ToString(); product.Name = "TEST"; return product; } } public class Product { #region 属性 private String _id; /// /// 唯一标识 /// public String Id { get { return _id; } set { _id = value; } } private String _name = String.Empty; /// /// 名称 /// public String Name { get { return _name; } set { _name = value; } } #endregion }}
3.启动类 

using Owin;using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Threading.Tasks;using System.Web.Http;namespace WebApiOwin{    public class Startup    {        public void Configuration(IAppBuilder appBuilder)        {            // Configure Web API for self-host.             //HttpConfiguration config = new HttpConfiguration();            //默认的模板配置,这种配置方式只能提供http://localhost:9000/api/valuesparam的访问方式,            //该无法定位到函数的访问方式即http://localhost:9000/api/valuesparam/getproduct            //config.Routes.MapHttpRoute(            //    name: "DefaultApi",            //    routeTemplate: "api/{controller}/{id}",            //    defaults: new { id = RouteParameter.Optional }            //);            //appBuilder.UseWebApi(config);            HttpConfiguration config = new HttpConfiguration();            config.Routes.MapHttpRoute(                name: "DefaultApi",                routeTemplate: "api/{controller}/{action}/{id}",//其中action指的就是方法名,这种方式可以直接按http://localhost:9000/api/valuesparam/getproduct的方式访问                defaults: new { id = RouteParameter.Optional }//Optional表明routeTemplate中的id是可选的            );            appBuilder.UseWebApi(config);        }    }}

注:MapHttpRote的配置方式可以参照VS创建web api默认创建的路由配置方式来配置,参见下图

4.宿主程序

using Microsoft.Owin.Hosting;using System;using System.Collections.Generic;using System.Linq;using System.Net.Http;using System.Text;using System.Threading.Tasks;namespace WebApiOwin{    class Program    {        static void Main(string[] args)        {            // Start OWIN host             var server = WebApp.Start
(url: "http://localhost:9000/"); Console.ForegroundColor = ConsoleColor.White; Console.WriteLine("Web API listening at http://localhost:9000/"); // 程序直接访问web api HttpClient client = new HttpClient(); var response = client.GetAsync("http://localhost:9000/api/ValuesParam/TestProduct?productId={BDCB861C-7266-4D10-BBC1-4FDD83AF58BE}").Result; Console.ForegroundColor = ConsoleColor.Red; Console.WriteLine(response.Content.ReadAsStringAsync().Result); response = client.GetAsync("http://localhost:9000/api/ValuesParam/getproduct?productId={BDCB861C-7266-4D10-BBC1-4FDD83AF58BE}").Result; Console.ForegroundColor = ConsoleColor.Red; Console.WriteLine(response.Content.ReadAsStringAsync().Result); Console.ReadLine(); } }}
注:ValuesParam是控制器类名去掉Controller的名称,getproduct是函数名,问号后面的是参数及数值,productId是参数名,等号后边的是参数的值。

转载请注明出处

转载于:https://www.cnblogs.com/sparkleDai/p/7604951.html

你可能感兴趣的文章
原创:SecureCRT连接linux终端颜色配置
查看>>
java关键字--this
查看>>
SDL_AudioSpec结构体分析
查看>>
Autoconf和Automake,自动生成Makefile
查看>>
观影《寒战》
查看>>
create instance 生成创建虚拟机从nova到调用libvirt流程(pycharm debug):
查看>>
今天的学习
查看>>
我的友情链接
查看>>
[Unity] 文件夹图像资源的读取
查看>>
【go语言】wait,wait for me
查看>>
Kubernetes Dashboard 与DNS部署
查看>>
jquery checkbox挖坑
查看>>
You have new mail in /var/spool/mail/root
查看>>
一道关于计算机如何做加法的面试题
查看>>
Django进阶-Forms模块实例
查看>>
Linux系统安装初始化及优化脚本
查看>>
SpringMVC + MyBatis整合
查看>>
远程桌面的开启和故障处理
查看>>
Linux 下 /dev/zero 和 /dev/null
查看>>
java 面试
查看>>