I need to detect when there is a redirect. My first thought was to check the status code for 301, but for:
var link = "https://grnh.se/8dc368b82us?s=LinkedIn&source=LinkedIn";
var responseMessage = await httpClient.GetAsync(link);
responseMessage returns "OK" but in the browser this link returns 301 and redirects.

So if I can't rely on this, then I decided to just compare the request URI to the response URI.
GetAsync returns a Task<HttpResponseMessage> but HttpResponseMessage does not have a property for the response URI.
https://learn.microsoft.com/en-us/dotnet/api/system.net.http.httpresponsemessage?view=net-5.0
System.Net.WebResponse contains a property for the response URI, but can I use this with HttpClient? or must I use WebRequest for the request?
https://learn.microsoft.com/en-us/dotnet/api/system.net.webresponse?view=net-5.0
Is there a better way?
Note: This will be scanning millions of links, so I'd prefer to instantiate one HttpClient. Microsoft recommends using HttpClient rather than WebRequest: https://learn.microsoft.com/en-us/dotnet/api/system.net.webresponse?view=net-5.0
You can disable automatic redirect like this:
var httpClient = new HttpClient(new HttpClientHandler { AllowAutoRedirect = false });
var link = "https://grnh.se/8dc368b82us?s=LinkedIn&source=LinkedIn";
var responseMessage = await httpClient.GetAsync(link);
Then you can check for redirect comparing responseMessage.StatusCode with common redirect codes:
MovedPermanently = 301
Redirect = 302
TemporaryRedirect = 307
New location will be in responseMessage.Headers.Location and you can request for it again if you need.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With