Я собираюсь сходить с ума, пытаясь выяснить, как передать параметры POST в методы Web API в ASPNET CORE 2.0.
У меня есть клиентское приложение C # и серверное приложение C #.
- Я пытался использовать [FromBody] в методе Web Api.
- Я пытался установить тип содержимого "application / json"
- Я упростил действие контроллера, чтобы оно было максимально простым
- Я попытался передать как строку, так и сложный объект.
Это ВСЕГДА NULL. Что происходит?
Код клиента :
private static async Task SendCustomObject()
{
var controllerName = "BasicApi";
var basicClientApi = string.Format("http://localhost:5100/api/{0}", controllerName);
using (var httpClient = new HttpClient()){
var packetData = new TestPacket();
var jsonObj = new { json = packetData };
JObject jobject = JObject.FromObject(packetData);
var json = JsonConvert.SerializeObject(jobject);
var content = new StringContent(json, Encoding.UTF8, "application/json");
content.Headers.ContentType = new MediaTypeHeaderValue("application/json");
// This doesn't help:
//httpClient.DefaultRequestHeaders.Accept.Clear();
//httpClient.DefaultRequestHeaders.Accept.Add(new System.Net.Http.Headers.MediaTypeWithQualityHeaderValue("application/json"));
var response = await httpClient.PostAsync(basicClientApi, content);
if (!response.IsSuccessStatusCode)
{
Console.WriteLine(response.StatusCode);
}
else
{
var rawResponse = await response.Content.ReadAsStringAsync();
JObject o = JObject.Parse(rawResponse);
Console.WriteLine(o.ToString());
}
}
}
Код сервера:
namespace myApp.Controllers
{
[Route("api/[controller]")]
public class BasicApiController : Controller
{
[HttpPost]
public JsonResult Post([FromBody] string json) // json is always null!
{
var jsonData = JsonConvert.DeserializeObject<Models.TestPacket>(json);
return Json(new { result = true });
}
}
}