Я хочу, чтобы в C # вызывался ApiController также в C #, но я получаю ошибку 415 или 400 при загрузке Json с использованием метода UploadString из экземпляра WebClient.
Код сервера - это автоматически сгенерированный вызов TestController. Этот файл в точности соответствует тому, как его генерирует Visual Studio 2019.
[Route("api/[controller]")]
[ApiController]
public class TestController : ControllerBase
{
// GET: api/Test
[HttpGet]
public IEnumerable<string> Get()
{
return new string[] { "value1", "value2" };
}
// POST: api/Test
[HttpPost]
public void Post([FromBody] string value)
{
}
...
}
Код клиента выглядит так:
WebClient client = new WebClient();
client.UploadString("https://localhost:44345/api/Test", "ABC"); // Edit: "ABC" is not a valid JSON
Я получаю
System.Net.WebException: 'Удаленный сервер возвратил ошибку: (415) Неподдерживаемый тип носителя.'
Так что после поиска в Google большинство подсказок - ContentType не получает указание, если я добавлю
client.Headers[HttpRequestHeader.ContentType] = "application/json";
Я получаю System.Net.WebException: 'Удаленный сервер возвратил ошибку: (400) Неверный запрос.'
Есть подсказка?
Похоже, что проблема связана с POST
/ PUT
/ PATCH
... если я сделаю GET
, он работает и возвращает мне образец данных ["value1","value2"]
Edit: я не придерживаюсь метода WebClient.UploadString, но мне бы хотелось решение, которое не включало бы 25 строк пользовательского кода ... Я имею в виду, я не могу поверить, что это так сложно, где вы можете это сделать в jQuery с использованием одной строки.