You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

.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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.24 06:45:11