采用Web Host方式寄宿Web API的宿主程序WebHost是一个空的ASP.NET应用,除了让它引用定义ContactsController项目的WebApi
我们还需要引用几个必须的程序集
System.Web.Http;
System.Web.Http.WebHost;
System.Net.Http;
如果采用WebHost的方式来寄宿WebAPI,ASP.NET自身的路由系统会成为接收请求的第一道屏障,在将请求递交给ASP.NET Web API自己
的信息处理管道之前,路由系统会解析出当前请求访问的目标HttpController和Action的名称。我们需要做的就是根据需求注册相应的路由,这也是
Web Host寄宿方式所需的唯一操作
我们在WebHost项目中添加一个Global.asax文件。并在Application_Start方法中注册一个模板为 api/{controller}/{id}.
api :静态文本"api"表示前缀,(可有可无)
{controller} :路由参数 ,表示HttpController的名称
{id} :可以映射为目标Action的方法的同名参数(这是一个可以缺省的路由参数)
protected void Application_Start(object sender, EventArgs e) { GlobalConfiguration.Configuration.Routes.MapHttpRoute( name: "DefaultApi", routeTemplate: "api/{controller}/{id}", defaults: new { id = RouteParameter.Optional }); }
如上所示,路由注册是通过调用代表全局路由表的HttpRouteController对象的扩张方法MapHttpRoute来完成的,
GlobalConfiguration的静态属性 Configuration返回一个代表当前配置的HttpConfiguration对象,全局路由表就注册在它的Rountes属性上。
到此为止Web API的Web Host寄宿工作就已经完成了。我们可以利用浏览器来条用寄宿的Web API.
在默认情况下,通过 VS(本文使用的VS2015)创建的Web应用总是使用IIS Express作为服务器,它为自动为我们指定一个可用的端口号,为了更好的模拟真实发布环境,同时避免“跨域资源共享”带来的困扰,我们采用本地IIS作为服务器。
方式一
在浏览器输入http://localhost/WebHost/api/Contacts 请求的就是我们的Get方法,返回所有的信息
在浏览器http://localhost/WebHost/api/Contacts/001 ,同样请求的还是Get方法,此时{id}识别为001,返回的就是这个人的信息。
方式二 手动在IIS发布
在浏览器http://localhost/YRFAPIDemo/WebHost/api/Contacts/001 ,看下图,得到的结果是一样的。
在开发阶段为什么要使用IIS启动程序呢,最简单的好处就是可以直接附加到进程进行调试。