是否有可能使HttpClient忽略无效的ETag标头作为响应?

时间:2017-12-07 08:59:38

标签: c# web-services .net-core dotnet-httpclient

我正在处理一个应用程序,该应用程序使用HttpClient API向我无法控制的第三方服务发出Web服务请求。该服务似乎响应具有ETag HTTP标头的请求,该标头包含根据HTTP规范的无效值(该值未包含在引号中)。这会导致HttpClient失败并显示System.FormatException

在这种情况下,我对ETag标头不感兴趣,并希望能够忽略无效值。 是否可以使用HttpClient

执行此操作

我更愿意使用HttpClient API而不是WebClientWebRequest,因为这个特殊用例要求我使用SOCKS代理,这在使用{{1}时要简单得多}。

1 个答案:

答案 0 :(得分:2)

试试这个:

class Example
{
    static void Main()
    {
        var client = HttpClientFactory.Create(new Handler());
        client.BaseAddress = new Uri("http://www.example.local");
        var r = client.GetAsync("").Result;
        Console.WriteLine(r.StatusCode);
        Console.WriteLine(r.Headers.ETag);
    }
}

class Handler : DelegatingHandler
{
    protected override async Task<HttpResponseMessage> SendAsync(HttpRequestMessage request, CancellationToken cancellationToken)
    {
        var headerName = "ETag";
        var r = await base.SendAsync(request, cancellationToken);
        var header = r.Headers.FirstOrDefault(x => x.Key == headerName);
        var updatedValue = header.Value.Select(x => x.StartsWith("\"") ? x : "\"" + x + "\"").ToList();
        r.Headers.Remove(headerName);
        r.Headers.Add(headerName, updatedValue);
        return r;
    }
}

我的回复标题:

  

HTTP / 1.1 200确定

     

日期:2013年1月25日星期五16:49:29 GMT

     

FiddlerTemplate:True

     

内容长度:310

     

内容类型:image / gif

     

ETag:rtt123