【问题标题】:Convert Web API to use Self Hosting转换 Web API 以使用自托管
【发布时间】:2013-12-31 09:17:19
【问题描述】:

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

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

搜索并没有提供太多信息来帮助我填补这个知识空白。希望有人能指出我正确的方向。即使是高水平。

【问题讨论】:

标签: c# asp.net iis asp.net-web-api owin


【解决方案1】:

我最近不得不使用 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 项目的属性。在“应用程序”部分,我将“输出类型”设置为“控制台应用程序”,并将“程序”类设置为“启动对象”。

虽然不是必需的,但我稍微修改了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();
} 

最后,不用在Startup.Configuration()内多次调用config.Routes.MapHttpRoute(),你可以参考你已经为Web API编写的路由:

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

【讨论】:

  • Program.cs 未显示在“启动对象”中。有什么想法吗?
  • 这是一个很好的答案,兄弟。希望我能给它+10。谢谢!
  • @Sinaesthetic,您需要将项目类型从项目库更改为控制台应用程序,然后 Program.cs 作为启动对象可用
猜你喜欢
  • 2019-02-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-01-09
  • 2017-11-17
相关资源
最近更新 更多