【问题标题】:The format of value 'XXX.yyyyy' is invalid值'XXX.yyyyy'的格式无效
【发布时间】: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' 是 无效。

如何解决这个问题?它清楚地表明格式无效,但我相信 Adob​​e 的 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


【解决方案1】:

请改用adobeRequest.Headers.TryAddWithoutValidation

【讨论】:

    猜你喜欢
    • 2016-09-20
    • 2011-03-30
    • 1970-01-01
    • 2010-10-31
    • 1970-01-01
    • 1970-01-01
    • 2023-03-20
    • 2017-08-09
    • 2017-05-14
    相关资源
    最近更新 更多