ASP.NET WebApi的多种托管方式

在之前的一篇文章中,介绍了WebApi的基础知识以及如何创建一个简单的WebApi。还探讨了一个使用WebApi作为后端的单页应用程序。在这两个项目中,WebApi都是作为ASP.NET应用程序的一部分托管在IIS中的。如果正在开发的WebApi将被设备应用程序使用,那么并不总是需要将其作为Web应用程序(IIS托管)来托管。在本文中,将探讨ASP.NET WebApi可以被托管的不同方式。

IIS托管

当在ASP.NET应用程序中托管WebApi时,ASP.NET托管基础设施会负责WebApi的所有托管需求。如果选择在ASP.NET应用程序中托管WebApi,不需要手动做太多事情。如果想要创建一个将被托管在ASP.NET网站(即IIS)中的WebApi,需要执行以下步骤:

注意:也可以使用NuGet包管理器在现有的ASP.NETMVC 4应用程序中添加WebApi。

这将创建WebApiConfig中的路由:

config.Routes.MapHttpRoute( name: "DefaultApi", routeTemplate: "api/{controller}/{id}", defaults: new { id = RouteParameter.Optional } );

同时,它将创建一个示例WebApi控制器ValuesController:

public class ValuesController : ApiController { // GET api/values public IEnumerable 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) { } }

注意:本文不会创建任何Api控制器,因为本文的主要目的是探讨托管选项。要了解更多关于如何实现控制器的信息,请参考第一篇文章。

当运行这个应用程序时,Web应用程序将由开发服务器运行,这个开发服务器将托管包含的WebApi。让运行项目并使用Postman测试WebApi。

同样,一旦完成了开发,所需要做的就是将这个Web应用程序托管在IIS中,反过来WebApi将被托管在IIS中。

自托管

现在,当尝试在自己的应用程序中托管WebApi时,需要负责所有的配置。由于在IIS托管中,所有与托管相关的配置都是从IIS配置或网站配置中获取的,不需要执行此步骤。但是,当需要自托管WebApi时,需要创建自己的HttpSelfHostServer服务器来执行IIS的部分工作,为此需要手动定义所有配置。

让尝试看看如何让一个简单的控制台应用程序托管WebApi。首先,需要使用NuGet包管理器拥有所有依赖/所需的包。

创建一个HttpSelfHostConfiguration类的实例。这将负责WebApi所需的所有配置。现在让只配置这个WebApi将运行的URI。

Uri myUri = new Uri("http://localhost:9999"); HttpSelfHostConfiguration config = new HttpSelfHostConfiguration(myUri);

接下来,需要准备好路由配置并将其附加到这个配置对象上。

config.Routes.MapHttpRoute( name: "DefaultApi", routeTemplate: "api/{controller}/{id}", defaults: new { id = RouteParameter.Optional } );

现在使用上面看到的相同的ValuesController类,作为控制器来处理WebApi请求。

public class ValuesController : ApiController { // GET api/values public IEnumerable 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) { } }

现在有一个配置对象准备好了,有一些最小的配置,即监听的URI和路由。

一个简单的ValuesController准备好了,以服务请求。

现在让创建一个HttpSelfHostServer的实例,并使用上面的配置对象。然后将异步打开服务器。

HttpSelfHostServer server = new HttpSelfHostServer(config); server.OpenAsync().Wait(); Console.WriteLine("WebApi hosted on " + myUri.AbsoluteUri + " It can be tested now"); Console.ReadLine();

WebApi并没有托管在这个控制台应用程序中。让继续并使用Postman测试这个WebApi。

沪ICP备2024098111号-1
上海秋旦网络科技中心:上海市奉贤区金大公路8218号1幢 联系电话:17898875485