Я пытаюсь выполнить запрос PUT к методу веб-API с использованием HttpClient. Почти идентичный запрос POST работает так, как ожидалось, но запрос PUT приводит к ошибке 400 (неудачный запрос). Я не уверен, что я делаю неправильно.Результаты запроса PUT в 400 Bad Request
Вот мой веб-код контроллера API:
public HttpResponseMessage Post(object val)
{
Debug.WriteLine(val.ToString());
return new HttpResponseMessage(HttpStatusCode.OK);
}
public HttpResponseMessage Put(int id, object val)
{
Debug.WriteLine(id.ToString(), val.ToString());
return new HttpResponseMessage(HttpStatusCode.OK);
}
А потом вот код на стороне клиента, который пытается вызвать эти методы. Запрос POST выглядит следующим образом:
var client = new HttpClient();
var content = log.ToJsonContent();
var address = new Uri(_webApiBaseAddress + "logs");
client.PostAsync(address, content).ContinueWith(requestTask =>
{
requestTask.Result.EnsureSuccessStatusCode();
});
И запрос PUT, что не работает, выглядит так:
var client = new HttpClient();
var content = log.ToJsonContent();
var address = new Uri(_webApiBaseAddress + "logs/" + jobId);
client.PutAsync(address, content).ContinueWith(requestTask =>
{
requestTask.Result.EnsureSuccessStatusCode();
});
Как вы можете видеть, я лишен функциональности вниз, как голый, как я может получить его, и я все равно получаю ошибку с запросом PUT каждый раз.
Кстати, я могу успешно выполнить запрос PUT с помощью клиента RestSharp. Этот код успешно вызывает метод API:
var client = new RestClient(_webApiBaseAddress);
var request = new RestRequest("logs/{id}", Method.PUT);
request.AddUrlSegment("id", jobId.ToString());
request.AddObject(log);
client.Execute(request);
Проблема с делать это таким образом, что любой объект, я прохожу в использовании AddObject только заканчивает тем, что строка, когда он попадает в метод контроллера. Если я передаю int, я хочу получить int. HttpClient делает это с помощью метода POST, поэтому я хотел использовать его, но PUT выдает ошибку. Таким образом, я застрял в двух полуработающих решениях, которые, к сожалению, не доходят до полного решения. Я был бы признателен за обратную связь по любому шаблону, чтобы заставить это работать.
Edit: Поскольку это было упомянуто ниже, вот мой метод .ToJsonContent()
расширения:
public static StringContent ToJsonContent(this object obj)
{
var converter = new IsoDateTimeConverter();
converter.DateTimeStyles = DateTimeStyles.AdjustToUniversal;
var json = JsonConvert.SerializeObject(obj, converter);
var content = new StringContent(json, Encoding.UTF8, "application/json");
return content;
}
человек у меня такая же проблема –