C# 托管一个真正的WebAPI项目而不是一个简单的类

C# 托管一个真正的WebAPI项目而不是一个简单的类,c#,asp.net-web-api,console-application,topshelf,C#,Asp.net Web Api,Console Application,Topshelf,我读过几篇关于TopShelf如何工作的文章。他们都在说: 创建控制台应用程序 添加Topshelf NuGet包 创建一个简单的testController:ApiController来表示服务逻辑(我希望托管我现有的WEB API项目,而不是这个testController) 但是现在我想让我现有的WebAPI项目托管,而不是这个testController。在这个TopShelf控制台应用程序中,我应该如何用这个testController替换我的项目 显然,我不能用TopShelf

我读过几篇关于TopShelf如何工作的文章。他们都在说:

  • 创建控制台应用程序

  • 添加Topshelf NuGet包

  • 创建一个简单的
    testController:ApiController
    来表示服务逻辑(我希望托管我现有的WEB API项目,而不是这个testController

但是现在我想让我现有的WebAPI项目托管,而不是这个
testController
。在这个TopShelf控制台应用程序中,我应该如何用这个
testController
替换我的项目

显然,我不能用TopShelf来配置我的WEB API项目本身,而不是使用控制台应用程序,因为WEB API没有像控制台应用程序那样的exe文件

我只想知道我应该如何用我真正的API项目替换控制台应用程序中的这个测试控制器?

  • 向解决方案中添加新的控制台应用程序

  • 将NuGet软件包
    Microsoft.Owin.SelfHost
    Microsoft.AspNet.WebApi.OwinSelfHost
    Topshelf
    安装到新项目中

  • 添加一个
    Startup.cs
    ()

  • 添加
    TopshelfService.cs

    public class TopshelfService
    {
        private IDisposable moDisposable = null;
    
        public void Start()
        {
            this.moDisposable = WebApp.Start<Startup>("http://localhost:9989");
        }
    
        public void Stop()
        {
            this.moDisposable?.Dispose();
        }
    }
    
  • 编译并运行

  • 使用“Project.exe”安装服务

  • 现在您有了一个windows服务“自宿主Web API演示”


  • 基本上,您必须创建一个独立的Web API项目。然后,您可以在新创建的项目中添加testcontroller,然后将其托管在IIS中。@SouvikGhosh我想通过Topshelf将其托管在Windows服务中,而不是IIS中。您是否检查过此-@SouvikGhosh这是我读过的几篇文章之一。正如文章中所述,您应该使用控制台应用程序中的opshelf。我应该在哪里将我的WEB API项目集成到这个Topshelf和控制台应用程序中?非常感谢。这正是我所需要的。我想知道为什么没有文章提到这一点,以及如何使用Topshelf处理真实世界的API。我需要的唯一缺失部分是步骤6和7。从您的控制器创建一个虚拟实例在Startup类中。(在启动Owin之前加载WebApi项目时,这是必需的)这在任何地方都没有提到。虽然我甚至做了第6步,但没有第7步,它是不起作用的。如果你从控制台应用程序开始,你不需要WebApi项目。你可以简单地将控制器类添加到项目中。然后你就不需要第7步。但是用控制台应用程序替换我的WEB API项目是一个好主意吗?如果你想安装它的话他将应用程序作为一个自托管windows服务…为什么不呢
    public void Configuration(IAppBuilder app)
    {
        DemoController dummy = new DemoController();
    
        // Configure Web API for self-host. 
        var config = new HttpConfiguration();
        config.Routes.MapHttpRoute(
            name: "DefaultApi",
            routeTemplate: "api/{controller}/{id}",
            defaults: new { id = RouteParameter.Optional }
        );
    
        app.UseWebApi(config);
    }