Неверный запрос (400) для POST-запроса к ASP.NET Core 6, минимальный API, отправленный почтальоном

почему я получаю 400 неверных запросов при тестировании минимального приложения API ASP.NET CORE с Postman?

Минимальный проект API ядра VS 2022 ASP.NET по умолчанию со следующим обработчиком метода:

      app.MapPost("/test", (AnalizeSentenceRequest r) =>
{
    return Results.Ok($"Echo: {r.Sentence}");
});

ДТО:

      public class AnalizeSentenceRequest
{
    public string? Sentence { get; set; }
}

Завитки Windows 10 или Ubuntu работают нормально:

      > curl -X POST http://localhost:5050/test -H "Content-Type: application/json" -d "{\"sentence\":\"testing\"}"

отклик:

«Эхо: тестирование»

Но Почтальон получает 400:

Заголовки почтальона:

Изменить: ответ почтальона:

Он жалуется, что не может привязаться к DTO AnalizeSentenceRequest r

Я попытался добавить в обработчик атрибут [FromBody]:

      ([FromBody] AnalizeSentenceRequest r) => ...

но это не имеет значения.

Хотя с завитком работает... Похоже, Почтальон что-то путает с телом, но что это может быть?

Полный ответ:

      Microsoft.AspNetCore.Http.BadHttpRequestException: Required parameter "AnalizeSentenceRequest r" was not provided from body.
   at Microsoft.AspNetCore.Http.RequestDelegateFactory.Log.RequiredParameterNotProvided(HttpContext httpContext, String parameterTypeName, String parameterName, String source, Boolean shouldThrow)
   at lambda_method1(Closure , Object , HttpContext , Object )
   at Microsoft.AspNetCore.Http.RequestDelegateFactory.<>c__DisplayClass46_3.<<HandleRequestBodyAndCompileRequestDelegate>b__2>d.MoveNext()
--- End of stack trace from previous location ---
   at Microsoft.AspNetCore.Routing.EndpointMiddleware.<Invoke>g__AwaitRequestTask|6_0(Endpoint endpoint, Task requestTask, ILogger logger)
   at Swashbuckle.AspNetCore.SwaggerUI.SwaggerUIMiddleware.Invoke(HttpContext httpContext)
   at Swashbuckle.AspNetCore.Swagger.SwaggerMiddleware.Invoke(HttpContext httpContext, ISwaggerProvider swaggerProvider)
   at Microsoft.AspNetCore.Diagnostics.DeveloperExceptionPageMiddleware.Invoke(HttpContext context)

HEADERS
=======
Accept: */*
Host: localhost:5050
Content-Type: application/json

1 ответ

Ставим галочку в чекбоксе Content-Length в Postman. Причина в том, что заголовок Content-Length является обязательным для сообщений с телами сущностей, если только сообщение не транспортируется с использованием фрагментированного кодирования. Content-Length необходим для обнаружения преждевременного усечения сообщений при сбое серверов и для правильной сегментации сообщений, которые используют постоянное соединение.

Другие вопросы по тегам