首页 > 解决方案 > ASP.NET Core - 调用控制器 HTTP 端点总是导致“错误请求”

问题描述

我已经自动生成了一个控制器来处理GearComponent(我的自定义类)的创建/插入/删除。例如,此POST方法处理 a 的插入,然后从数据库GearComponent中添加正确的主键:id

// POST: api/GearComponents
[HttpPost]
public async Task<IActionResult> PostGearComponent([FromBody] GearComponent gearComponent)
{
    if (!ModelState.IsValid)
    {
        return new BadRequestObjectResult(
            ModelState.Values
                .SelectMany(e => e.Errors)
                .Select(e => e.ErrorMessage));
    }

    _context.GearComponents.Add(gearComponent);
    await _context.SaveChangesAsync();

    return CreatedAtAction("GetGearComponent", new { id = gearComponent.Id }, gearComponent);
}

我想在 ASP.NET Core 2.1 应用程序运行时不断地写入数据库(它是一个“WebCrawler”-Thing)。该线程将我引向有关如何实现 a并在启动时注册它的线程。BackgroundService

这是我的服务(它只是插入虚拟数据):

public class WebCrawlerService : BackgroundService
{

    private readonly HttpClient client = new HttpClient();

    private readonly string requestUrl = "https://localhost:44377/api/controller/";

    public WebCrawlerService() { }

    protected override async Task ExecuteAsync(CancellationToken stoppingToken)
    {
        while (!stoppingToken.IsCancellationRequested)
        {
            var httpContent = new StringContent(JsonConvert.SerializeObject(new GearComponent("Name", "Description", "08.12.2018")));
            var result = client.PostAsync(requestUrl, httpContent);
            await Task.Delay(2000);
        }
    }
}

虽然插入完全相同GearComponent(JSON-String 相同)但Postman效果很好:

在此处输入图像描述

我总是得到

400 错误请求

由此result(见WebCrawlerService):

var result = client.PostAsync(requestUrl, httpContent);

为什么?感谢@Haldo,它现在正在工作:

var httpContent = new StringContent(JsonConvert.SerializeObject(new GearComponent("Name", "Description", "08.12.2018")), Encoding.UTF8, "application/json");

标签: c#asp.net.net-core

解决方案


推荐阅读