ASP.NET Web Api 实践系列(一)自我寄宿

    从今天开始,研究ASP.NET Web Api(以下有时会简称Web Api)。我会写一个实践系列专题,不一定成理论体系,只是遇到问题或心得,记下来。争取用一段较长的时间对ASP.NET Web Api有个较深入的理解。这里我是使用VS2013集成开发环境,如果版本不够,可以用NuGet去下载Web Api相关dll。

    今天讨论自我寄宿Web Api。

    Web Api继承了WCF的优点,除了常规的Web寄宿(IIS)外,还可以在NET的控制台、WinForms等程序中寄宿。这里讲一讲在控制台中寄宿Web Api。

    一、编写Api方法

    新建C#类库项目MyControllers,引用System.Web.Http.dll。

    编写Api类文件MyValuesController.cs:

using System.Web.Http;

namespace MyControllers
{
    public class MyValuesController : ApiController
    {
        public string Get()
        {
            return "OK";
        }
    }
}

    二、添加寄宿项目

    添加一个控制台项目MyConsoleApiSvr,引用MyControllers项目,同时引用以下4个Web Api相关DLL:

  • System.Net.Http.dll
  • System.Web.Http.dll
  • System.Net.Formatting.Http.dll
  • System.Web.Http.SelfHost.dll

    主程序如下:

 1 using System;
 2 using System.IO;
 3 using System.Web.Http;
 4 using System.Web.Http.SelfHost;
 5 using System.Reflection;
 6 
 7 namespace MyConsoleApiSvr
 8 {
 9     class Program
10     {
11         static void Main(string[] args)
12         {
13             Console.Title = "Api Service";
14 
15             var apiDll = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "MyControllers.dll");
16             Assembly.LoadFrom(apiDll);
17             var config = new HttpSelfHostConfiguration("http://localhost:4588");
18             config.Routes.MapHttpRoute(
19                 name: "DefaultApi",
20                 routeTemplate: "api/{controller}/{id}",
21                 defaults: new {id = RouteParameter.Optional});
22             using (var svr = new HttpSelfHostServer(config))
23             {
24                 svr.OpenAsync().Wait();
25                 Console.WriteLine("API服务已开启!");
26                 Console.ReadLine();
27             }
28             
29         }
30     }
31 }

    以上代码可以分为几个步骤:

  1. 加载包含Api控制器方法的DLL。(第16行)
  2. 添加服务配置,并指定服务寄宿地址。(第17行)
  3. 添加全局默认路由配置。(第18-21行)
  4. 定义并打开服务。(第22、24行)

    三、运行服务并测试

    运行Web Api服务:

    并在浏览器中测试:

posted @ 2015-08-08 12:45  捡贝壳的小哥  阅读(1670)  评论(0编辑  收藏  举报