今天有在研究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. python购物车-基础版本

    # 1. 用户先给自己的账户充钱:比如先充3000元.# 2. 页面显示 序号 + 商品名称 + 商品价格,如:# 1 电脑 1999# 2 鼠标 10# …# n 购物车结算# 3. 用户输入选择的 ...

  2. 【java】-- 线程安全

    1.线程安全问题介绍与案例分析 当多个线程同时共享,同一个全局变量或静态变量,做写的操作时,可能会发生数据冲突问题,也就是线程安全问题.但是做读操作是不会发生数据冲突问题. 案例:需求现在有100张火 ...

  3. 纯 CSS 绘制三角形(各种角度)

     转载:https://www.cnblogs.com/lhb25/p/css-and-css3-triangle.html       Triangle Up #triangle-up { widt ...

  4. CSS空心圆

    CSS代码:改变border的大小控制空心的大小 div { width: 100px; height: 100px; background: #ffffff; border-radius: 50%; ...

  5. php操作数组函数

    整理了一份PHP开发中数组操作大全,包含有数组操作的基本函数.数组的分段和填充.数组与栈.数组与列队.回调函数.排序.计算.其他的数组函数等. 一.数组操作的基本函数 数组的键名和值 array_va ...

  6. VS中自定义类模版

    以下为vs2017 专业版,安装目录在D盘 安装路径: D:\Program Files (x86)\Microsoft Visual Studio\\Professional\Common7\IDE ...

  7. 如何查找MySQL中查询慢的SQL语句(转载)

    转载自https://www.cnblogs.com/qmfsun/p/4844472.html 如何在mysql查找效率慢的SQL语句呢?这可能是困然很多人的一个问题,MySQL通过慢查询日志定位那 ...

  8. prometheus+grafana 监控生产环境机器的系统信息、redis、mongodb以及jmx

    介绍: 为了更好的对生产环境的一些中间件和操作系统的运行情况进行可视化的展示,近期了解了下prometheus加上grafana来实现这种效果,由于prometheus是新出来的开源项目,所以,监控的 ...

  9. 反沙箱——SetErrorMode

    目录 1.前言 2.原理讲解 3.代码实现 4.参考 1.前言 利用SetErrorMode进行反沙箱的技术,在2010年就有被提出,但是之前搜了很久都没有相关内容,这里简单的说一下这个反沙箱的实现. ...

  10. LeetCode笔记:39. Combination Sum

    题目描述 给定一个无重复的正整数数组 candidates 和一个正整数 target, 求所有和为 target 的 candidates 中数的组合中.其中相同数的不同顺序组合算做同一种组合,ca ...