转换Web API以使用自托管

trn*_*son 23 c# asp.net iis asp.net-web-api owin

我正在尝试将现有的ASP.NET Web API项目(当前在IIS中托管)转换为可以使用SelfHost框架的项目.我对实际细节有点模糊,但我知道我可以在控制台窗口中运行自主服务器,然后在它上面运行服务.我遇到的问题是我的项目是MVC项目而不是控制台项目.我对控制台/ Windows应用程序的熟悉程度有限,因为我通常使用要在IIS中托管的项目.

我有点困惑的是我是否需要将Visual Studio中现有的Web API项目转换为新的控制台应用程序,或者是否有办法在解决方案中创建另一个控制台应用程序项目,该项目可以充当Web服务器Web API服务,或者更确切地说,是否有一种方法可以向现有MVC项目添加带有Main()入口点的控制台元素(覆盖Global.asax入口点).

搜索没有产生太多信息,可以帮助我填补这一知识空白.希望有人能指出我正确的方向.即使是在高水平.

Rub*_*ron 44

我最近不得不使用OWIN(在Visual Studio 2013上)将Web API项目转换为自托管服务.我这样做如下:

(1)在项目的根目录下手动添加Program.cs和Startup.cs文件.这两个文件包含如下所述的代码:http://www.asp.net/web-api/overview/hosting-aspnet-web-api/use-owin-to-self-host-web-api.

(2)去了Web API项目的属性.在"Applications"部分,我将"Output Type"声明为"Console Application",并将"Program"类设置为"Startup object".

虽然不是必需的,但我稍微修改了Program.Main()中的"using"块,如下所示:

// Start OWIN host 
using (WebApp.Start<Startup>(url: baseAddress)) 
{ 
  // Create HttpCient and make a request to api/values 
  HttpClient client = new HttpClient(); 
  var response = client.GetAsync(baseAddress + "api/values").Result; 

  if (response != null)
  {
    Console.WriteLine("Information from service: {0}", response.Content.ReadAsStringAsync().Result);
  }
  else
  {
    Console.WriteLine("ERROR: Impossible to connect to service");
  }

  Console.WriteLine();
  Console.WriteLine("Press ENTER to stop the server and close app...");
  Console.ReadLine();
} 
Run Code Online (Sandbox Code Playgroud)

最后,不是在Startup.Configuration()中多次调用config.Routes.MapHttpRoute(),而是可以引用已经为Web API编写的路由:

// Configure Web API for self-host. 
var config = new HttpConfiguration();
WebApiConfig.Register(config);        
app.UseWebApi(config); 
Run Code Online (Sandbox Code Playgroud)