转换 Web API 以使用自托管

Posted

技术标签:

【中文标题】转换 Web API 以使用自托管【英文标题】:Convert Web API to use Self Hosting 【发布时间】: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 入口点。)

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

【问题讨论】:

这里有一些例子***.com/questions/12899360/…,***.com/questions/13165533/…来自我之前的回答。 @L.B 感谢您的评论,但除非我遗漏了什么,否则我不太明白这是如何回答问题的。 trnelson,两个答案都显示了 RestFul 服务的 self-contained 客户端和服务器代码。如果您觉得没有用,请忽略我的评论。 【参考方案1】:

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

    在项目的根目录中手动添加 Program.cs 和 Startup.cs 文件。两个文件都包含此处描述的代码:http://www.asp.net/web-api/overview/hosting-aspnet-web-api/use-owin-to-self-host-web-api。

    转到 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 作为启动对象可用

以上是关于转换 Web API 以使用自托管的主要内容,如果未能解决你的问题,请参考以下文章

使用 web api 自托管获取客户端的 IP 地址

Web API 自托管客户端配置

将 Web Api 服务自托管到 Windows 窗体中

在使用 Owin 自托管的 Web API 中获取远程主机 IP

WEB API 2 自托管主机名问题

asp.net web api 自托管 / owin / katana