.NET 5 Windows服务版控制台程序配置Webhook方法
在.NET 5 Windows服务中添加Webhook监听实现
步骤1:添加ASP.NET Core依赖
给主服务项目Service.csproj添加Web主机相关依赖,打开NuGet包管理器安装Microsoft.AspNetCore.App框架包(或单独安装Microsoft.AspNetCore、Microsoft.AspNetCore.Mvc等核心组件)。
步骤2:修改Program.cs集成Web服务
调整原有的Host配置,集成Web主机功能,同时保留Windows服务的运行模式:
public class Program { public static void Main(string[] args) { CreateHostBuilder(args).Build().Run(); } public static IHostBuilder CreateHostBuilder(string[] args) => Host.CreateDefaultBuilder(args) .ConfigureWebHostDefaults(webBuilder => { webBuilder.UseStartup<Startup>(); // 可选:直接在代码中指定监听端口,替代配置文件 // webBuilder.UseUrls("http://*:5000"); }) .UseWindowsService(); }
步骤3:创建Startup.cs配置Web服务
新建Startup.cs类,配置路由、控制器及原有服务:
public class Startup { public IConfiguration Configuration { get; } public Startup(IConfiguration configuration) { Configuration = configuration; } public void ConfigureServices(IServiceCollection services) { // 添加控制器支持 services.AddControllers(); // 保留原有服务配置 services.AddHostedService<Worker>(); services.AddMemoryCache(); // 注册你的业务逻辑服务(根据实际项目调整) services.AddScoped<IMyBusinessService, MyBusinessService>(); } public void Configure(IApplicationBuilder app, IWebHostEnvironment env) { if (env.IsDevelopment()) { app.UseDeveloperExceptionPage(); } app.UseRouting(); // 映射控制器端点 app.UseEndpoints(endpoints => { endpoints.MapControllers(); }); } }
步骤4:编写Webhook处理控制器
新建Controllers/WebhookController.cs,实现请求接收与自定义逻辑处理:
[ApiController] [Route("api/[controller]")] public class WebhookController : ControllerBase { private readonly IMyBusinessService _businessService; public WebhookController(IMyBusinessService businessService) { _businessService = businessService; } // 处理POST类型的Webhook请求 [HttpPost] public async Task<IActionResult> Post([FromBody] WebhookRequest request) { // 自定义逻辑:验证请求合法性(如签名校验) if (!IsValidRequest(request)) { return Unauthorized(); } // 调用业务逻辑处理请求 await _businessService.ProcessWebhookAsync(request); return Ok(new { Message = "Webhook processed successfully" }); } // 示例:请求合法性校验方法,根据实际需求实现 private bool IsValidRequest(WebhookRequest request) { // 这里可添加签名验证、IP白名单等逻辑 return true; } } // 示例:Webhook请求模型,根据实际Payload结构调整 public class WebhookRequest { public string EventType { get; set; } public string Payload { get; set; } // 其他字段... }
步骤5:配置监听端口(可选)
在appsettings.json中添加端口配置(若未在代码中指定):
{ "Logging": { "LogLevel": { "Default": "Information", "Microsoft": "Warning", "Microsoft.Hosting.Lifetime": "Information" } }, "Urls": "http://*:5000" // 监听所有IP的5000端口,支持HTTPS(需配置证书) }
注意事项
- 若使用HTTPS,需配置SSL证书,可在配置文件中指定
https://*:5001并添加证书相关配置。 - 部署Windows服务时,确保服务账户拥有端口监听权限(1024以下端口需管理员权限)。
- 务必添加请求合法性校验(如签名验证),防止恶意请求。
内容的提问来源于stack exchange,提问作者ofer gertz
相关产品推荐
相关产品推荐

