Так что я искал ответ на этот вопрос, но ничего, что я нашел, даже близко не подходит к его решению.
Я пытаюсь настроить метод Post в моем Web API, но неважното, что я делаю, просто выдает мне внутреннюю ошибку сервера.
Я попытался добавить [FromBody] (это простой тип).
HttpClient client {get;set;}
public APICall()
{
client = new HttpClient
{
BaseAddress = new Uri("http://localhost:1472/api/")
};
client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/x-protobuf"));
}
public void PostTimeTaken(long timeTaken)
{
var response = client.PostAsJsonAsync("Logging", timeTaken).Result;
if (!response.IsSuccessStatusCode)
{
Console.WriteLine(response.ReasonPhrase);
}
}
, и тогда мое действие контроллера выглядит так:
public void Post([FromBody] long timeTaken)
{
_api.DataBuilder.NumberOfAPICalls += 1;
_api.DataBuilder.ResponseTimes.Add(timeTaken);
}
Я не получаю сообщения об ошибке, которое могло бы фактически объяснить, что происходит, просто "Внутренняя ошибка сервера"
------ РЕШЕНО -------
На тот случай, если кто-нибудь наткнется на это в поисках того же ответа, проблема заключалась в том, что я отправлял данные на сервер в неправильном формате, сначала нужно было сериализовать ProtoBuf, фрагмент кода для любого, кому это могло бы помочь:
public void PostToAPI(int ThingToSend)
{
using (var stream = new MemoryStream())
{
// serialize to stream
Serializer.Serialize(stream, ThingToSend);
stream.Seek(0, SeekOrigin.Begin);
// send data via HTTP
StreamContent streamContent = new StreamContent(stream);
streamContent.Headers.Add("Content-Type", "application/x-protobuf");
var response = client.PostAsync("Logging", streamContent);
Console.WriteLine(response.Result.IsSuccessStatusCode);
}
}