HttpClient忽略了请求URI的`www。部分

时间:2017-06-29 13:54:41

标签: c# .net httprequest .net-4.5 dotnet-httpclient

我尝试使用GET发送HttpClient请求:

public static HttpClient Client { get
{
    var handler = new HttpClientHandler() { AutomaticDecompression = System.Net.DecompressionMethods.Deflate | System.Net.DecompressionMethods.GZip };
    var http = new HttpClient(handler) { BaseAddress = new Uri("https://www.example.com/") };
    http.DefaultRequestHeaders.Accept.Clear();
    http.DefaultRequestHeaders.Accept.TryParseAdd("*/*");
    http.DefaultRequestHeaders.AcceptLanguage.TryParseAdd("en-US;q=0.6,en;q=0.4");
    http.DefaultRequestHeaders.AcceptEncoding.TryParseAdd("gzip, deflate, br");
    http.DefaultRequestHeaders.Host = "example.com";
    http.DefaultRequestHeaders.Add("X-Requested-With", "XMLHttpRequest");

    http.DefaultRequestHeaders.Add("Connection", "keep-alive");
    http.DefaultRequestHeaders.Add("Keep-Alive", "600");
    http.DefaultRequestHeaders.UserAgent.TryParseAdd("Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/59.0.3071.115 Safari/537.36");
    ServicePointManager
        .ServerCertificateValidationCallback +=
        (sender, cert, chain, sslPolicyErrors) => true;
    return http;
}
...
using (var client = HttpHelper.Client)
using (var res = await client.GetAsync("api/stuff/filter?order=" + order + "&page=" + page))
    if (res.IsSuccessStatusCode)
    {
        var json = await res.Content.ReadAsStringAsync();
        var response = JsonConvert.DeserializeObject<AnimeResponse>(json);
        return response;
    }

不幸的是,这会在没有www.部分的情况下发送请求,并导致301状态代码以及许多失败的重定向到同一地址(没有www.部分)。

我该如何解决这个问题?

编辑:当我使用Fiddler重新发送请求时,它也会返回301,但是它会正确地重定向到wwww.HttpClient没有,只是重定向到相同的无www的URI。

0 个答案:

没有答案