我如何在HttpRequestMessage中包含If-None-Match头

本文关键字:包含 If-None-Match HttpRequestMessage | 更新日期: 2023-09-27 18:02:47

我有HttpRequestMessage如下:

string URI = "http://" + MyHostName.DisplayName.ToString() + "/datastore/";
HttpClient client = new HttpClient();
HttpRequestMessage request = new HttpRequestMessage(HttpMethod.Get, URI);
string Params = "";
request.Headers.Accept.Add(new MediaTypeWithQualityHeaderValue("text/plain"));
request.Headers.AcceptCharset.Add(new StringWithQualityHeaderValue("utf-8", 0.7));
request.Headers.AcceptLanguage.Add(new StringWithQualityHeaderValue("en-us", 0.5));
request.Content = new StreamContent(new MemoryStream(System.Text.Encoding.UTF8.GetBytes(Params)));
request.Content.Headers.Add("Content-Type", "application/x-www-form-urlencoded");
try
{
    var result = await client.SendAsync(request);
    var content = await result.Content.ReadAsStringAsync();
    return content.ToString();
}
catch (HttpRequestException)
{
    Connected = false;
    return "";
}

我想添加一个If-None-Match头到我的请求与一个值,如'8001'为例。但是当我查找HttpRequestHeaders。IfNoneMatch你只能获取它而不能设置它

任何想法?

编辑1:添加系统在Windows 10上运行UWP

我如何在HttpRequestMessage中包含If-None-Match头

解决方案似乎是自定义添加If-None-Match头

供将来参考。有可能服务器不接受带引号的ETag,如"8001"。

要解决这个问题,可以使用
            request.Headers.TryAddWithoutValidation("If-None-Match", "8001");

这将导致If-None-Match标签8001

你可以试试

request.Headers.Add("If-None-Match", "'"8001'"");

request.Headers.IfNoneMatch.Add(new System.Net.Http.Headers.EntityTagHeaderValue("'"8001'""));

我还没有测试第二个。

使用EntityTagHeaderValue。使用TryParse方法安全地添加Etag。一定要在字符串周围加上引号。如果您从以前的请求中收到Etag值,则这些值已经包含在其中。