c# - 使用 HttpClient,在 301 的情况下如何防止自动重定向并获取原始状态代码和转发 Url

标签 c# http redirect httpclient

<分区>

我有以下方法返回给定 UrlHttp 状态代码:

public static async void makeRequest(int row, string url)
{
    string result;
    Stopwatch sw = new Stopwatch(); sw.Start();

    try
    {
        using (HttpClient client = new HttpClient())
        {
            HttpResponseMessage response = new HttpResponseMessage();
            response = await client.GetAsync(url);

            // dump contents of header
            Console.WriteLine(response.Headers.ToString());

            if (response.IsSuccessStatusCode)
            {
                result = ((int)response.StatusCode).ToString();
            }
            else
            {
                result = ((int)response.StatusCode).ToString();
            }
        }
    }
    catch (HttpRequestException hre)
    {
        result = "Server unreachable";
    }

    sw.Stop();
    long time = sw.ElapsedTicks / (Stopwatch.Frequency / (1000L * 1000L));

    requestComplete(row, url, result, time);
}

它适用于 200/404 等,但是对于 301 代码,我相信返回的结果是 already-redirected (200) 结果,而不是应该返回的实际 301,它会有一个包含重定向指向的 header 。

我在其他 .Net Web 请求类中看到过类似的东西,其中的技术是将某种 allowAutoRedirect 属性设置为 false。如果这是正确的,谁能告诉我 HttpClient 类的正确替代方案?

This post has info on the above allowAutoRedirect concept I mean

否则,对于我知道是真正的 301 的 Urls,我如何才能让此方法返回 301s 而不是 200s

最佳答案

我发现这样做的方法是创建一个 HttpClientHandler 的实例。并将其传递给 HttpClient

的构造函数
public static async void makeRequest(int row, string url)
{
    string result;
    Stopwatch sw = new Stopwatch(); sw.Start();

    // added here
    HttpClientHandler httpClientHandler = new HttpClientHandler();
    httpClientHandler.AllowAutoRedirect = false;

    try
    {
        // passed in here
        using (HttpClient client = new HttpClient(httpClientHandler))
        {

        }

参见 here了解更多信息。

关于c# - 使用 HttpClient,在 301 的情况下如何防止自动重定向并获取原始状态代码和转发 Url,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14731980/

相关文章:

Azure移动应用程序身份验证外部重定向URL

c# - 在 Unity 3d 中限制 3d 模型的旋转

python - 如何使 Flask 流式传输具有 HTTP 206 部分内容的静态文件?

javascript - YOURLS 使用 Javascript 重定向

java - 使用 Java 以编程方式下载 CSV 文件

multithreading - 当客户端是多线程时,客户端对 HTTP 429 的正确 react 是什么?

ios - Instagram 重定向 URI 不匹配或有时 safari 显示 "Cannot open because invalid address"+ iOS native 应用程序

c# - 多个 Task<T> 或 IProgress<T> 用于部分完成?

c# - 在方法外使用 var

c# - 递归字符串反转函数