#c# #.net #httpclient #echosign
#c# #.net #httpclient #эхо-сигнал
Вопрос:
Я пытаюсь настроить заголовок if-match следующим образом и использовать HttpClient, доступный в System.Net.Http:
client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
var adobeRequest = new HttpRequestMessage(HttpMethod.Put, new Uri(url))
{
Content = new StringContent(JsonConvert.SerializeObject(request), Encoding.UTF8, "application/json")
};
if (!string.IsNullOrEmpty(Etag))
adobeRequest.Headers.Add("If-Match", Etag);
var response = client.SendAsync(adobeRequest);
Etag, который я получил от adobe в предыдущем вызове (Get), равен :
64E8BBA87ACFD0C2C84AF6E1193A3761.5334C3A18AB5A054FF3DBC33AFBDF6C
Поэтому, когда я пытаюсь добавить то же самое для запроса Put, это выдает мне следующую ошибку:
Формат значения ’64E8BBA87ACFD0C2C84AF6E1193A3761.5334C3A18AB5A054FF3DBC33AFBDF6C’ недопустим.
Как решить эту проблему? В нем четко указано, что формат недопустим, однако я считаю, что API Adobe используется миллионами других пользователей. Так что каким-то образом это что-то с моей стороны.
Ссылка на Adobe api
Комментарии:
1. Не мог бы кто-нибудь, пожалуйста, сообщить мне, почему этот вопрос был отклонен?
2. Похоже, что Adobe API принимает e-tag в качестве параметра с именем
If-Match
вместо заголовка, по крайней мере, вput /agreements/{agreementId}/state
. Вы пробовали добавлять значение в качестве параметра с именемIf-Match
вместо заголовка?3. Каково фактическое значение
Etag
? Полное предположение, но это нормально, когда само значение заключено в кавычки, что затем вызвало бы проблемы, если бы вы передали его как есть вAdd
, поскольку оно попыталось бы заключить его в собственные кавычки вокруг него, т. Е. Если значение имеет что-то вроде"64E...F6C"
, тогда заголовок в конечном итоге был бы""64E...FC6""
, что было бы недопустимо.4. @JonathonChase: Нет, я не пробовал, однако в его описании они сказали указать в качестве заголовка. Позвольте мне попробовать добавить его в качестве параметра. Спасибо, Джонатан.
5. В качестве альтернативы (все еще предполагаю), возможно,
Add
не добавляются кавычки, поэтому заголовок заканчивается какIf-Match: 64E...F6C
, что также было бы недопустимо. В этом случае вам нужно будет заключить его в кавычки самостоятельно:adobeRequest.Headers.Add("If-Match", $""{Etag}"");
Ответ №1:
Используйте adobeRequest.Headers.TryAddWithoutValidation
вместо этого.