从 .NET 6 升级到 .NET 8 后,Webhook 接收器无法工作

问题描述 投票:0回答:1

从 .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();
c# asp.net-core webhooks .net-8.0
1个回答
0
投票

下面是显示 .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包:

enter image description here

结果:

enter image description here

© www.soinside.com 2019 - 2024. All rights reserved.