WebAPI中的SelfHost

ASP.NET的中WebAPI程序,一般都是托管在IIS上,但是SelfHost(自宿主)模式,是自己监听自己的服务,可以是一个WinForm程序,也可以是一个Console程序。

第一步

首先新建Console项目,在NuGet中添加引用下面四个扩展库。

-Microsoft.AspNet.WebApi.Client

-Microsoft.AspNet.WebApi.Core

-Microsoft.AspNet.WebApi.SelfHost

-Newtonsoft.Json


第二步

Program.cs中编写如下代码。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Web.Http;
using System.Web.Http.SelfHost;
using Newtonsoft.Json;
using Newtonsoft.Json.Serialization;
namespace BlogSelfHostWebAPI
{
class Program
{
static string str = "http://0.0.0.0:8989/";
static readonly Uri _baseAddress = new Uri(str);
static void Main(string[] args)
{

HttpSelfHostServer server = null;
try
{
// 设置selfhost
HttpSelfHostConfiguration config = new HttpSelfHostConfiguration(_baseAddress);

//配置(config);
//清除xml格式,设置Json格式
config.Formatters.XmlFormatter.SupportedMediaTypes.Clear();
config.Formatters.JsonFormatter.SerializerSettings.Formatting = Newtonsoft.Json.Formatting.Indented;
//设置路由
config.Routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "api/{controller}/{id}",
defaults: new { id = RouteParameter.Optional }
);
// 创建服务
server = new HttpSelfHostServer(config);

// 开始监听
server.OpenAsync().Wait();
Console.WriteLine("Listening on " + _baseAddress);
Console.WriteLine("Web API host started...");
//输入exit按Enter結束httpServer
string line = null;
do
{
line = Console.ReadLine();
}
while (line != "exit");
//结束连接
server.CloseAsync().Wait();
}
catch (Exception e)
{
Console.WriteLine("Could not start server: {0}", e.GetBaseException().Message);
Console.WriteLine("Hit ENTER to exit...");
Console.ReadLine();
}
finally
{
if (server != null)
{
// Stop listening
server.CloseAsync().Wait();
}
}
}
}
}

第三步

新建UserController类,继承ApiController。代码如下。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Web.Http;

namespace BlogSelfHostWebAPI
{
public class UserController: ApiController
{
public IEnumerable<string> Get()
{

return new string[] { "user1", "user2" };
}

}
}

第四步

运行你的程序,在浏览器中输入 http://localhost:8989/api/user,

可以看到响应的Json数据。

[

“user1”,

“user2”

]


源码 下载