Restsharp 107 请求失败并出现错误 "Request failed with status code Redirect"

Restsharp 107 request fails with error "Request failed with status code Redirect"

我正在更新 resharp 107 的一些代码。此特定代码与没有 api 的遗留网站接口,并且基本上从用户端抓取数据。

我提出的请求 returns 一些数据并重定向用户。在 restsharp 的过去版本中,您只需将 FollowRedirects 设置为 false 即可读取响应而无需重定向。升级到 107 后,它现在会抛出错误,我无法再读取响应。

这里是错误

Exception Exception thrown: 'System.Net.Http.HttpRequestException' in System.Private.CoreLib.dll ("Request failed with status code Redirect") System.Net.Http.HttpRequestException

这是代码

 var options = new RestClientOptions($"{data.BaseUrl}/Admin/EditEmployee.aspx")
            {
                ThrowOnAnyError = false,
                Timeout = 20000,
                CookieContainer = data.Cookies,
                UserAgent = "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:92.0) Gecko/20100101 Firefox/92.0",
                FollowRedirects = false,
            };

            var client = new RestClient(options);
            var request = new RestRequest();
            request = request.AddHeader("Accept", "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8");
            request = request.AddHeader("Accept-Language", "en-US,en;q=0.5");
            request = request.AddHeader("Content-Type", "application/x-www-form-urlencoded");
            request = request.AddHeader("Origin", $"{data.BaseUrl}");
            request = request.AddHeader("Connection", "keep-alive");
            request = request.AddHeader("Referer", $"{data.BaseUrl}/Admin/EditEmployee.aspx");
            request = request.AddHeader("Cookie", $"TBHFORMAUTH={tbhformauth.Value}; ASP.NET_SessionId={sessionId.Value}");
            request = request.AddHeader("Upgrade-Insecure-Requests", "1");
            request = request.AddHeader("Sec-Fetch-Dest", "document");
            request = request.AddHeader("Sec-Fetch-Mode", "navigate");
            request = request.AddHeader("Sec-Fetch-Site", "same-origin");
            request = request.AddHeader("Sec-Fetch-User", "?1");
            request = request.AddHeader("Pragma", "no-cache");
            request = request.AddHeader("Cache-Control", "no-cache");
            request = request.AddHeader("TE", "trailers");
            request = request.AddParameter("__EVENTTARGET", "");
            request = request.AddParameter("__EVENTARGUMENT", "");
            request = request.AddParameter("__VIEWSTATE", data.ViewState);
            request = request.AddParameter("__VIEWSTATEGENERATOR", "68248626");
            request = request.AddParameter("__EVENTVALIDATION", data.EventValidation);
            request = request.AddParameter("ctl00_ctl00_westZone_mainMenu_Collapsed", "false");
            request = request.AddParameter("ctl00_ctl00_westZone_mainMenu_SelIndex", "");
            request = request.AddParameter("ctl00_ctl00_westZone_informationTablesMenu_Collapsed", "true");
            request = request.AddParameter("ctl00_ctl00_westZone_informationTablesMenu_SelIndex", "");
            request = request.AddParameter("ctl00_ctl00_westZone_marketingMenu_Collapsed", "true");
            request = request.AddParameter("ctl00_ctl00_westZone_marketingMenu_SelIndex", "");
            request = request.AddParameter("ctl00_ctl00_westZone_productsMenu_Collapsed", "true");
            request = request.AddParameter("ctl00_ctl00_westZone_productsMenu_SelIndex", "");
            request = request.AddParameter("ctl00_ctl00_westZone_APIManagementMenu_Collapsed", "true");
            request = request.AddParameter("ctl00_ctl00_westZone_APIManagementMenu_SelIndex", "");
            request = request.AddParameter("ctl00$ctl00$centerZone$ContentPlaceHolder1$tbxFirstName", firstName);
            request = request.AddParameter("ctl00$ctl00$centerZone$ContentPlaceHolder1$tbxLastName", lastName);
            request = request.AddParameter("ctl00$ctl00$centerZone$ContentPlaceHolder1$tbxLogin", userName);
            request = request.AddParameter("ctl00$ctl00$centerZone$ContentPlaceHolder1$ddlRoles", "0");
            request = request.AddParameter("ctl00$ctl00$centerZone$ContentPlaceHolder1$ddlDepartment", "10");
            request = request.AddParameter("ctl00$ctl00$centerZone$ContentPlaceHolder1$newPassword1", password);
            request = request.AddParameter("ctl00$ctl00$centerZone$ContentPlaceHolder1$newPassword2", password);
            request = request.AddParameter("ctl00$ctl00$centerZone$ContentPlaceHolder1$btnSave", "Save");
            request = request.AddParameter("ctl00_ctl00_LoginBlock1_PreventAutoCompleteUserName", "");
            request = request.AddParameter("ctl00_ctl00_LoginBlock1_PreventAutoCompletePassword", "");
            request = request.AddParameter("ctl00_ctl00_LoginBlock1_loginField", "");
            request = request.AddParameter("passwordField", "");
            request = request.AddParameter("ctl00_ctl00_LoginBlock1_gotoDashboard", "ctl00_ctl00_LoginBlock1_gotoDashboard");
            request = request.AddParameter("ctl00$ctl00$centerZone$ContentPlaceHolder1$ddlCompany", "-1");
            request = request.AddParameter("ctl00$ctl00$centerZone$ContentPlaceHolder1$phone$phoneExtension", "");
            request = request.AddParameter("ctl00$ctl00$centerZone$ContentPlaceHolder1$phone$phone1", "");
            request = request.AddParameter("ctl00$ctl00$centerZone$ContentPlaceHolder1$phone$phone2", "");
            request = request.AddParameter("ctl00$ctl00$centerZone$ContentPlaceHolder1$phone$phoneExtension2", "");
            request = request.AddParameter("ctl00$ctl00$centerZone$ContentPlaceHolder1$tbxSignature", "");
        
            RestResponse response = await client.PostAsync(request);

除了将重定向设置为 false 之外,是否需要执行一些新操作才能读取初始响应?或者这可能是新的 RestSharp 更新的问题?

看来我很快就想通了...

通过在 RestRequest 中设置方法类型并将 PostAsync 更改为 ExecuteAsync,它可以按预期工作。也许有人可以告诉我为什么会这样?