C# 托管一个真正的WebAPI项目而不是一个简单的类
我读过几篇关于TopShelf如何工作的文章。他们都在说: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 NuGet包
- 创建一个简单的
来表示服务逻辑(我希望托管我现有的WEB API项目,而不是这个testController)testController:ApiController
testController
。在这个TopShelf控制台应用程序中,我应该如何用这个testController
替换我的项目
显然,我不能用TopShelf来配置我的WEB API项目本身,而不是使用控制台应用程序,因为WEB API没有像控制台应用程序那样的exe文件
我只想知道我应该如何用我真正的API项目替换控制台应用程序中的这个测试控制器?
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();
}
}
基本上,您必须创建一个独立的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);
}