【发布时间】:2019-03-14 18:48:19
【问题描述】:
我正在尝试如下设置 if-match 标头并使用 System.Net.Http 中可用的 HttpClient:
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);
我在之前的(Get)调用中从 adobe 收到的 Etag 是:
64E8BBA87ACFD0C2C84AF6E1193A3761.5334C3A18AB5A054FF3DBC33AFBDF6C
所以当我尝试为 Put 请求添加相同的内容时,它给了我以下错误:
值的格式 '64E8BBA87ACFD0C2C84AF6E1193A3761.5334C3A18AB5A054FF3DBC33AFBDF6C' 是 无效。
如何解决这个问题?它清楚地表明格式无效,但我相信 Adobe 的 api 正在被数百万人使用。所以不知何故它是我的目标。
Adobe api的链接
【问题讨论】:
-
有人可以告诉我为什么这个问题被否决了吗?
-
Adobe API 看起来像是将电子标签作为名为
If-Match的参数而不是标题,至少在put /agreements/{agreementId}/state中是这样。您是否尝试将值添加为名为If-Match而不是标头的参数? -
Etag的实际值是多少?完全是猜测,但是引用值本身是正常的,如果您将其按原样传递给Add,则会导致问题,因为它会尝试在其周围添加自己的引号,即如果值类似于@987654330 @,那么标题最终将是""64E...FC6"",这将是无效的。 -
@JonathonChase:不,我没有尝试过他们所说的指定为标题的描述。让我尝试将其添加为参数。谢谢 Jonathon。
-
或者(仍在猜测),也许
Add没有添加引号,因此标题最终为If-Match: 64E...F6C,这也是无效的。在这种情况下,您需要自己引用:adobeRequest.Headers.Add("If-Match", $"\"{Etag}\"");
标签: c# .net httpclient echosign