从 .NET 6 升级到 .NET 8 后,Webhook 接收器停止工作。以下是在 .NET 6 中工作的控制器和方法:
[Route("api/[controller]")]
[ApiController]
public class EController : Controller
{
[HttpPost]
[Route("/api/webhooks/incoming")]
[ProducesResponseType(StatusCodes.Status200OK)]
[ProducesResponseType(StatusCodes.Status400BadRequest)]
[ProducesResponseType(StatusCodes.Status500InternalServerError)]
public async Task<IActionResult> Post(object message)
{
try
{
ResponseModel model = JsonConvert.DeserializeObject<ResponseModel>(message.ToString());
await manager.handleNotify(model);
return Ok(model);
}
catch (Exception ex)
{
Logger.Error(ex, "Failure to access incoming webhook post");
return StatusCode(StatusCodes.Status500InternalServerError, ex.Message);
}
}
}
已安装的软件包:
Microsoft.AspNet.WebHooks.Receivers.Custom
Microsoft.AspNet.WebHooks.Receivers.Generic
Program.cs
:
var config = new HttpConfiguration();
config.InitializeReceiveGenericJsonWebHooks();
config.InitializeReceiveCustomWebHooks();
下面是显示 .ne webhook 接收器的示例代码。
EController.cs:
using Microsoft.AspNetCore.Mvc;
using Microsoft.Extensions.Logging;
using System;
using System.Text.Json;
using System.Threading.Tasks;
using WebhookReceiver.Models;
using WebhookReceiver.Services;
[Route("api/[controller]")]
[ApiController]
public class EController : ControllerBase
{
private readonly ILogger<EController> _logger;
private readonly Manager _manager;
public EController(ILogger<EController> logger, Manager manager)
{
_logger = logger;
_manager = manager;
}
[HttpPost]
[Route("webhooks/incoming")]
[ProducesResponseType(StatusCodes.Status200OK)]
[ProducesResponseType(StatusCodes.Status400BadRequest)]
[ProducesResponseType(StatusCodes.Status500InternalServerError)]
public async Task<IActionResult> Post([FromBody] JsonElement message)
{
try
{
var model = JsonSerializer.Deserialize<ResponseModel>(message.GetRawText());
await _manager.HandleNotify(model);
return Ok(model);
}
catch (Exception ex)
{
_logger.LogError(ex, "Failure to access incoming webhook post");
return StatusCode(StatusCodes.Status500InternalServerError, ex.Message);
}
}
}
程序.cs:
using Microsoft.AspNetCore.Builder;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Hosting;
using WebhookReceiver.Services;
var builder = WebApplication.CreateBuilder(args);
// Add services to the container.
builder.Services.AddControllers();
builder.Services.AddEndpointsApiExplorer();
builder.Services.AddSwaggerGen();
// Register the Manager service
builder.Services.AddSingleton<Manager>();
var app = builder.Build();
// Configure the HTTP request pipeline.
if (app.Environment.IsDevelopment())
{
app.UseSwagger();
app.UseSwaggerUI();
}
app.UseHttpsRedirection();
app.UseAuthorization();
app.MapControllers();
app.Run();
已安装的nuget包:
结果: