C# HttpClient GetStringAsync返回301,但浏览器能够导航到正确的地址

C# HttpClient GetStringAsync返回301,但浏览器能够导航到正确的地址,c#,dotnet-httpclient,http-status-code-301,C#,Dotnet Httpclient,Http Status Code 301,我认为HttpClient应该能够处理301错误代码,并重定向到正确的地址。但是,对于以下地址(),它抛出异常。不过浏览器能够正确地处理它。我只是想知道是否有出路或者我错过了什么 HttpClient client = new HttpClient(); var s = await client .GetStringAsync("https://www.npr.org/templates/rss/podcast.php?id=510298"); 投掷 Test1 [0:00.779]

我认为
HttpClient
应该能够处理
301
错误代码,并重定向到正确的地址。但是,对于以下地址(),它抛出异常。不过浏览器能够正确地处理它。我只是想知道是否有出路或者我错过了什么

HttpClient client = new HttpClient();

var s = await client
    .GetStringAsync("https://www.npr.org/templates/rss/podcast.php?id=510298");
投掷

Test1 [0:00.779] Failed: System.Net.Http.HttpRequestException : Response 
status code does not indicate success: 301 (Moved Permanently).
System.Net.Http.HttpRequestException : Response status code does not 
indicate success: 301 (Moved Permanently).
   at System.Net.Http.HttpResponseMessage.EnsureSuccessStatusCode()
   at System.Net.Http.HttpClient.GetStringAsyncCore(Task`1 getTask)
   at XUnitTestProject1.UnitTest1.Test1() in 
   C:\Users\res\source\repos\test\XUnitTestProject1\UnitTest1.cs:line 13

我终于找到了原因。通常
HttpClient
会正确处理重定向,但如果它来自
https->http
,则不会处理重定向。这里就是这样。我被chrome浏览器的响应难住了,chrome中显示的重定向url以https开头(https://www.npr.org/rss/podcast.php?id=510298),但实际的重定向是http://www.npr.org/rss/podcast.php?id=510298


我终于找到了原因。通常
HttpClient
会正确处理重定向,但如果它来自
https->http
,则不会处理重定向。这里就是这样。我被chrome浏览器的响应难住了,chrome中显示的重定向url以https开头(https://www.npr.org/rss/podcast.php?id=510298),但实际的重定向是http://www.npr.org/rss/podcast.php?id=510298


中有一个解释,当您跟踪一个url并得到一个301错误时,您必须处理该错误并进行新的调用,这就是浏览器在后台执行的操作。HTTP客户端无法为您执行此操作,因为它不知道您要如何处理此错误,即是否要更新保存url的位置,以便下一次调用直接转到新url,是否要跟随指向新地址的链接,是否要调用其他url,是否要使操作失败。如何处理异常完全取决于您当您跟踪一个url并得到一个301错误时,您必须处理该错误并进行新的调用,这就是浏览器在后台所做的。HTTP客户端无法为您执行此操作,因为它不知道您要如何处理此错误,即是否要更新保存url的位置,以便下一次调用直接转到新url,是否要跟随指向新地址的链接,是否要调用其他url,是否要使操作失败。如何处理异常完全取决于您自己