ASP.NET HttpClient запрос возвращает 409 Ошибка - PullRequest
0 голосов
/ 28 августа 2018

Я делаю HTTP-вызов так:

[HttpGet]
public HttpResponseMessage updateRegistrant(string token, string registrantId, string firstname, string lastname, string postalCode, string phoneNumber, string city, string email)
{
    using (HttpClient httpClient = new HttpClient())
    {
        httpClient.BaseAddress = new Uri("https://api.example.com/v1/registrants/" + registrantId + "/");
        httpClient.DefaultRequestHeaders.Accept.Clear();
        httpClient.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
        httpClient.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", token);

        HttpRequestMessage request = new HttpRequestMessage(HttpMethod.Put, "person/contact-information");

        request.Content = new StringContent("{\"firstName\":\"" + firstname + "\", \"lastName\":\"" + lastname + "\", \"phones\":[{\"phone\":\"" + phoneNumber + "\", \"type\":\"Home\", \"primary\":true}], \"emails\":[{\"email\":\"" + email + "\", \"type\":\"Personal\", \"primary\":true}], \"addresses\":[{\"city\":\"" + city + "\", \"zipCode\":\"" + postalCode + "\"}]}", Encoding.UTF8, "application/json");

        //request.Content = new StringContent("{\"firstName\":\"" + firstname + "\", \"lastName\":\"" + lastname + "\"}", Encoding.UTF8, "application/json");

        HttpResponseMessage response = httpClient.SendAsync(request).Result;

        return response;
    }
}

Теперь, когда я запускаю этот метод, я получаю 409 Ошибка вызова, однако если я закомментирую первый запрос. Содержимое и раскомментирует второй запрос. Содержимое работает, я получаю код ответа 200.

Я бы предположил, что они вызывают ошибку 409:

\"phones\":[{\"phone\":\"" + phoneNumber + "\", \"type\":\"Home\", \"primary\":true}]

Но почему и как мне это исправить?

1 Ответ

0 голосов
/ 28 августа 2018

Вместо того, чтобы пытаться вручную построить строку JSON, рассмотрим такой подход.

string firstname = "";
string lastName = "";
string phoneNumber = "";
string primary = "";
string phoneNumber2 = "";

var registrant = new
{
    firstName = firstname,
    lastName = lastName,
    phones = new[]
    {
        new { phone = phoneNumber, type = "Home", primary = true },
        new { phone = phoneNumber2, type = "Work", primary = false }
    }
};

JavaScriptSerializer js = new JavaScriptSerializer();
string jsonData = js.Serialize(registrant);

Структурирование вашего запроса таким образом, чтобы вам было легче решать проблемы самостоятельно, может помочь вам ответить на ваш собственный вопрос и выяснить, какая именно часть данных вызывает ошибку. Это также поможет вам избежать основных опечаток при создании JSON.

409 может быть чем угодно. Проверьте объект ответа на предмет читаемого человеком сообщения об ошибке, которое может содержать больше информации. В целом это означает, что ваши обновленные данные конфликтуют с чем-то Телефоны, адреса и т. Д. Начните с известного рабочего запроса и добавляйте элементы по одному.

Если вы можете сузить, какие именно данные заставляют сервер возвращать 409, вернитесь и посмотрите более внимательно на их документацию по API. Вы на правильном пути.

...