Для использования адаптированного метода `MapPost` в классе `ControllerBase` вам необходимо выполнить следующие шаги:
1. Создайте класс `HttpService`, который будет обрабатывать все HTTP-запросы:
```csharp
public class HttpService
{
private static HttpClient _httpClient = new();
public static async Task<TResponse?> MapPost<TResponse, TRequest>(string url, TRequest request)
{
var responseMessage = await _httpClient.PostAsJsonAsync(url, request);
if (!responseMessage.IsSuccessStatusCode)
{
throw new Exception($"HTTP request failed with status code {(int)responseMessage.StatusCode} - {responseMessage.ReasonPhrase}");
}
return await responseMessage.Content.ReadFromJsonAsync<TResponse>();
}
}
```
2. В классе `ControllerBase` вызовите метод `MapPost` для отправки HTTP-запроса:
```csharp
public async Task<string?> TestRequest()
{
string content = "TestContent";
var response = await HttpService.MapPost<string, string>("https://localhost:7005/Api", content);
return response;
}
```
3. Обновите обработчик в классе `ApiController`, указав модель вместо строки:
```csharp
[HttpPost]
public async Task<ActionResult<User>> AddRequest(User user)
{
if (user == null)
{
return BadRequest();
}
db.Users.Add(user);
await db.SaveChangesAsync();
return Ok(user);
}
```
Теперь вы можете использовать адаптированный метод `MapPost` для отправки POST-запроса и передачи модели `User`.
Если бы я был контроллером API на MVC, то я бы ответил следующим образом: "Ваш запрос содержит некорректные данные" (код статуса 400 в протоколе HTTP). Контроллер API ожидает получить значение параметра "message" в вашем методе действия. Если вы отправляете запрос в формате JSON, то это должен быть объект с полем "message". Таким образом, в запросе POST необходимо отправить объект с полем "message". Например, вы можете использовать следующий код для создания объекта в строковом формате: string content = "TestContent". Также можно использовать объект с полем "message" в качестве "content", например, анонимный тип: var content = new { message = "TestContent" }. Метод PostAsJsonAsync сможет преобразовать это в формат JSON. И да, эти же правила относятся и к контроллеру на Minimal API, о котором вы упомянули в своем первом комментарии.
Если бы я был контроллером API на MVC, я бы также ответил следующим образом: "Что это за данные, которые вы мне прислали?" (в протоколе HTTP это обозначается кодом статуса 400). Контроллер API ожидает, что вы предоставите ему что-то содержащее значение для параметра message вашего метода действия. Если вы отправляете данные в формате JSON, то это должен быть объект с полем message. Контроллер найдет входной параметр метода действия с таким же именем message, как у вас, и привяжет значение этого поля. Поэтому в вашем запросе POST необходимо отправлять объект с этим полем. Например, вы можете использовать уже сериализованное (преобразованное в строку) значение: string content = "TestContent". Однако, вы также можете использовать объект с полем message, например, анонимный тип: var content = new { message = "TestContent" }. Метод PostAsJsonAsync сможет преобразовать это в JSON. И да, все это также применимо к контроллеру на Minimal API, о котором вы упоминали в вашем первом комментарии.