今天有在研究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. 组合 数论 莫比乌斯反演 hdu1695

    题解:https://blog.csdn.net/lixuepeng_001/article/details/50577932 题意:给定范围1-b和1-d求(i,j)=k的数对的数量 #includ ...

  2. pythonpipinstallpymongo报错

    1.安装pymongo模块,报错pip版本低,升级版本又报错找不到合适的版本,网友说网络问题,要使用国内的镜像源来加速:pip install pymongo -i http://pypi.douba ...

  3. Linux grep 命令详解

    简介grep (global search regular expression(RE) and print out the line,全面搜索正则表达式并把行打印出来)是一种强大的文本搜索工具,它能 ...

  4. springboot添加邮件发送及压缩功能

    springboot添加邮件发送及文件压缩功能 转载请注明出处:https://www.cnblogs.com/funnyzpc/p/9190233.html 先来一段诗 ``` 就这样吧 忍受折磨 ...

  5. linux仅修改文件夹权限 分别批量修改文件和文件夹权限

    比如我想把/var/www/html下的文件全部改成664,文件夹改成775,怎么做呢 方法一: 先把所有文件及文件夹改成664,然后把所有文件夹改成775 chmod -R 664 ./ find ...

  6. spark streaming中维护kafka偏移量到外部介质

    spark streaming中维护kafka偏移量到外部介质 以kafka偏移量维护到redis为例. redis存储格式 使用的数据结构为string,其中key为topic:partition, ...

  7. node02

    1.使用已有的知识实现一个简单的登录和注册的界面 请求有请求接口有请求页面的,我们需要加以区分 以下是客户端代码 <!DOCTYPE html> <html lang="e ...

  8. linux-Vim命令合集

    Vim命令合集 命令历史 以:和/开头的命令都有历史纪录,可以首先键入:或/然后按上下箭头来选择某个历史命令. 启动vim 在命令行窗口中输入以下命令即可 vim 直接启动vim vim filena ...

  9. HelloPython

    HELLOWORD!你好!Python! 学习Python已有一段时间,一个人自学颇不容易,在此分享一些自己学习经验和感受,温故而知新,也希望自己能有些新收获. 学习Python,大多数人创建的第一个 ...

  10. 在C++中,setw(int n)

    setw(int n)用来控制输出间隔例如:cout<<'s'<<setw(8)<<'a'<<endl;则在屏幕显示s        a //s与a之间 ...