今天有在研究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. ImCash是骗局吗?到底是真是假?

    关于风靡北美的ImCash是不是骗局,ImCash项目安全靠谱么?下面我将为你分析: 今天关于北美ImCash量子基金这个项目谈谈我个人的看法: 首先选择项目我最先看的是制度,如果奖金制度不好,其他的 ...

  2. 生产环境,vue页面跳转的时候,js报404的问题

    最近上线的一个vue项目,需要各种路由跳转,在开发和测试环境都没问题,但是在生产环境,发现后期更新代码的时候,有些机型(ios机型,暂未发现android有问题)跳转路由的时候,标题修改了,但是内容并 ...

  3. 第六章 对象-javaScript权威指南第六版(三)

    6.3 删除内容 delete运算符可以删除对象的属性. delete运算符只能删除自有属性,不能删除继承属性. delete表达式删除成功或没有任何副作用时,它返回true. 6.4 检测属性 用i ...

  4. Python PE8 编程规范

    1.使用四个空格而不是tab进行缩进 2.默认使用utf-8编码 3.尽量不要使用魔术方法 4.类中使用self作为默认参数 5.命名时,尽量使用驼峰式或单词+下划线,要保证见名知意 6.操作符和逗号 ...

  5. IOS8,IOS8.1等系统出现锁屏状态下WIFI断开问题的解决办法!

    网络设备:TP-Link 300M无线路由器.DLINK 300M无线路由器.HP 300M无线路由器.APPLE AirPort无线路由器 终端:iphone5S+IOS8.1 故障现象:除appl ...

  6. Egret的容器--删除对象,遮罩

    class P91F extends egret.Sprite { public constructor() { super(); this.addEventListener(egret.Event. ...

  7. jdk12+tomcat9 配置

    jdk12 没有了jre的配置   直接配置path就可以了 tomcat常规配置,只是启动的时候麻烦一点   需要重新写入jdk jre jvm 到server.bat文件 参考文章: https: ...

  8. Flutter 获取服务器数据

    文档 文档版本有些老 使用 dio 来获取数据 demo import 'dart:io'; import 'dart:convert'; import 'package:flutter/materi ...

  9. 口袋appnabcd

    N(need)需求:依据我们学习经历的情况而言,对于初次接触的专业的学生来说,对学习的方向上会感到迷茫,不知道如何学习以及不知道学什么.比如对于计算机专业来说,对于一些软件的选择和下载,应用环境配置等 ...

  10. ip锁死怎么设置ip地址

    单击电脑网络连接图标,打开网络和共享中心   点击本地连接   点击详细信息,即可看到IP地址.子网掩码.默认网关.DNS服务器信息   再点击本地连接状态下的属性   找到Internet 协议版本 ...