ASP.NET HttpClient запрос возвращает ошибку 409

Я делаю 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 ответ

Вместо того, чтобы пытаться вручную построить строку 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. Вы на правильном пути.

Другие вопросы по тегам