#c# #asp.net #webrequest
Вопрос:
Я пытаюсь опубликовать некоторые элементы в теле, но я продолжаю получать «(400) Неверный запрос», который, как я мог понять, обычно является проблемой с конечной точкой, которую вы пытаетесь поразить. Это правильно, так как я проверил это с помощью простых вызовов.
Это моя первая попытка сделать ПОСТ таким образом с телом, поэтому я не уверен, что я упускаю или делаю неправильно.
Это конечная точка, в которую я пытаюсь попасть
[Route("api/[controller]")]
[ApiController]
public class SaleController : ControllerBase
{
[HttpPost]
[Route("[action]")]
[Route("Sale/Test")]
public string Test([FromBody] Inventory[] inventories)
{
return "Found me";
}
}
Он выводит сообщение об ошибке 400 в HttpResponse
public IEnumerable<Inventory> GetTest(IpPartial ipPartial, Inventory[] inventories)
{
WebRequest request = WebRequest.Create("http://localhost:5002/api/Sale/Test");
request.Method = "POST";
request.ContentType = "application/json";
using (var streamWriter = new StreamWriter(request.GetRequestStream()))
{
string jsonString = new JavaScriptSerializer().Serialize(inventories);
streamWriter.Write(jsonString);
var httpResponse = (HttpWebResponse)request.GetResponse();
using (var streamReader = new StreamReader(httpResponse.GetResponseStream()))
{
var result = streamReader.ReadToEnd();
var pass = result.ToString();
}
streamWriter.Flush();
streamWriter.Close();
}
return inventories;
}
Это просто упрощенное представление о том, что я пытаюсь передать
[
{
"id": 1,
"categoryId": 1,
"taxId": 1,
"unitId": 1,
"scheduleId": 0,
"description": "Konsultasie",
"code": ""
},
{
"id": 2,
"categoryId": 7,
"taxId": 1,
"unitId": 1,
"scheduleId": 10,
"description": "Laxapet 50g",
"code": "220L"
}
]
Комментарии:
1.
WebRequest
и ему подобные устарели и мертвы. Они находятся на кладбище .net. ИспользуйтеIHttpClientFactory
вместо этого. Вы найдете их более дружелюбными с современными функциями, и поэтому вопросы, связанные с ними, получат гораздо больше ответов
Ответ №1:
Решил эту проблему, просто переключившись на простой асинхронный вызов.
public async Task<IEnumerable<Inventory>> CreateSale(IpPartial ipPartial, Inventory[] inventories)
{
string jsonString = new JavaScriptSerializer().Serialize(inventories);
var data = new StringContent(jsonString, Encoding.UTF8, "application/json");
var url = "http://localhost:5002/api/Sale/CreateSales";
using var client = new HttpClient();
var response = await client.PostAsync(url, data);
string result = response.Content.ReadAsStringAsync().Resu<
return inventories;
}