今天有在研究SignalR, 发现SignalR可以使用Self-Host的方式,就突发奇想,Web Api是不是也可以使用Self-Host的方式寄宿在Console Application或者其他的地方。

微软MSDN上给出的详细的答案,Web Api和WCF以及SignalR一样,支持Self-Host。

创建Self-Host项目

新建Console Application

创建成功之后,使用Nuget引入Web Api和Owin包。

打开Package Manager Console, 在里面录入以下命令

Install-Package Microsoft.AspNet.WebApi.OwinSelfHost

配置Web API Self-Host

在解决方案管理窗口,右键点击项目,选择Add/Class, 添加一个新文件Startup.cs

在Startup.cs中添加Configuration方法,该方法中指定了当前项目启用Web Api并指定了路由规则

using Owin; 

using System.Web.Http; 

 

namespace OwinSelfhostSample

{ 

    public class Startup 

    { 

        // This code configures Web API. The Startup class is specified as a type

        // parameter in the WebApp.Start method.

        public void Configuration(IAppBuilder appBuilder) 

        { 

            // Configure Web API for self-host. 

            HttpConfiguration config = new HttpConfiguration(); 

            config.Routes.MapHttpRoute( 

                name: "DefaultApi", 

                routeTemplate: "api/{controller}/{id}", 

                defaults: new { id = RouteParameter.Optional } 

            ); 

 

            appBuilder.UseWebApi(config); 

        } 

    } 

}

添加 Web Api Controller

在解决方案中,右键点击项目,选择Add/Class, 添加ValuesController.cs

using System.Collections.Generic;

using System.Web.Http;

 

namespace OwinSelfhostSample 

{ 

    public class ValuesController : ApiController 

    { 

        // GET api/values 

        public IEnumerable<string> Get() 

        { 

            return new string[] { "value1", "value2" }; 

        } 

 

        // GET api/values/5 

        public string Get(int id) 

        { 

            return "value"; 

        } 

 

        // POST api/values 

        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) 

        { 

        } 

    } 

}

使用Owin Host

修改Program.cs,  定义web api的base url, 并启动Owin Host

using Microsoft.Owin.Hosting;

using System;

 

namespace SelfHost

{

    class Program

    {

        static void Main(string[] args)

        {

            string baseAddress = "http://localhost:9000/";

 

            // Start OWIN host 

            using (WebApp.Start<Startup>(url: baseAddress))

            {

                Console.WriteLine("App Server started.");

                Console.ReadLine();

            }

        }

    }

 }

使用Postman测试Api

启动解决方案,等待程序显示”App Server Started.”

打开Postman输入测试的Api Url, 即得到正确的结果。

 

Web Api Self-Host的更多相关文章

  1. [ASP.NET Web API]如何Host定义在独立程序集中的Controller

    通过<ASP.NET Web API的Controller是如何被创建的?>的介绍我们知道默认ASP.NET Web API在Self Host寄宿模式下用于解析程序集的Assemblie ...

  2. Docker 之web api 访问 host sql server

    运行 Docker C:\Users\Administrator>docker run -it  -p 5000:5000 --name myapidocker1 webapiv1 root@3 ...

  3. asp.net web api 2 host in a windows service推荐阅读

    最简单的例子(官方)在控制台app里面运行: http://www.asp.net/web-api/overview/hosting-aspnet-web-api/use-owin-to-self-h ...

  4. 【ASP.NET Web API教程】3.2 通过.NET客户端调用Web API(C#)

    原文:[ASP.NET Web API教程]3.2 通过.NET客户端调用Web API(C#) 注:本文是[ASP.NET Web API系列教程]的一部分,如果您是第一次看本博客文章,请先看前面的 ...

  5. 【ASP.NET Web API教程】3.3 通过WPF应用程序调用Web API(C#)

    原文:[ASP.NET Web API教程]3.3 通过WPF应用程序调用Web API(C#) 注:本文是[ASP.NET Web API系列教程]的一部分,如果您是第一次看本博客文章,请先看前面的 ...

  6. Self-Host c#学习笔记之Application.DoEvents应用 不用IIS也能執行ASP.NET Web API

    Self-Host   寄宿Web API 不一定需要IIS 的支持,我们可以采用Self Host 的方式使用任意类型的应用程序(控制台.Windows Forms 应用.WPF 应用甚至是Wind ...

  7. 通过.NET客户端调用Web API(C#)

    3.2 Calling a Web API From a .NET Client (C#) 3.2 通过.NET客户端调用Web API(C#) 本文引自:http://www.asp.net/web ...

  8. ASP.NET Web API路由系统:Web Host下的URL路由

    ASP.NET Web API提供了一个独立于执行环境的抽象化的HTTP请求处理管道,而ASP.NET Web API自身的路由系统也不依赖于ASP.NET路由系统,所以它可以采用不同的寄宿方式运行于 ...

  9. Self Host模式下的ASP. NET Web API是如何进行请求的监听与处理的?

    构成ASP.NET Web API核心框架的消息处理管道既不关心请求消息来源于何处,也不需要考虑响应消息归于何方.当我们采用Web Host模式将一个ASP.NET应用作为目标Web API的宿主时, ...

  10. Web APi之Web Host消息处理管道(六)

    前言 我们知道Web API本身是无法提供请求-响应的机制,它是通过Web Host以及Self Host的寄宿的宿主方式来提供一个请求-响应的运行环境.二者都是将请求和响应抽象成HttpRespon ...

随机推荐

  1. shell编程基础语法

    创建文件:touch aaa.sh 把文件变成可执行的命令: chmod +x /Users/dream-mac/Desktop/aaa.sh (这里是文件路径,如果在当前路径下,只需要把文件名写到这 ...

  2. Codeforces 938D. Buy a Ticket (最短路+建图)

    <题目链接> 题目大意: 有n座城市,每一个城市都有一个听演唱会的价格,这n座城市由m条无向边连接,每天变都有其对应的边权.现在要求出每个城市的人,看一场演唱会的最小价值(总共花费的价值= ...

  3. 改进SQL Server 性能 - 索引碎片重建

    我们先来看一个用户表上的索引碎片情况: DBCC SHOWCONTIG scanning 'Lead' table...Table: 'Lead' (1422628111); index ID: 1, ...

  4. Win10 教育版

    Windows 10 版本 1607 引入了专为 K-12 机构的特有需求而设计的两个版本:Windows 10 专业教育版和 Windows 10 教育版. 这些版本为不断发展的 K-12 教育 I ...

  5. VMware14 安装CentOS7 实现宿主机ping通虚拟机、虚拟机ping通宿主机、虚拟机能上网且能ping通百度

    本文旨在通过通过虚拟机VMware14来安装CentOS7 系统,并配置固定IP来实现在Windows系统中使用Linux环境. 本文目录: 0.本机环境 1.VMware14 初始化 1.1.安装V ...

  6. 左倾堆C++实现

    #include <iostream> #include <vector> #include <queue> using namespace std; templa ...

  7. 安装xlwt和xlrd

    因为想用python实现读写excel.百度了下,要安装xlwt和xlrd,网上各种方法,很多都不便利.最后利用pip安装很方便. 第一步:浏览器检索“xlwt安装”,点击第一个网页(百度) 即出现如 ...

  8. python 错误记录

    class Func: d = dict() def __setitem__(self, key, value): # xxx object does not support item assignm ...

  9. Java_流程控制

    介绍: java的流程控制结构有三种:顺序.选择.循环            顺序结构,就是从头到尾依次执行每条语句的操作. 选择结构,也称条件控制,是指根据表达式的值有选择的执行. 循环结构,也称回 ...

  10. python获取多线程的返回值

    import threading class MyThread(threading.Thread): def __init__(self,func,args=()): super(MyThread,s ...