When using HttpClient
in C#, HTTP redirects can either be handled automatically or manually, depending on the configuration of the HttpClientHandler
used by the HttpClient
instance.
By default, HttpClient
will automatically follow HTTP redirection responses (like 301, 302, 303, or 307) unless the redirection count exceeds the limit (which by default is set to 50).
Handling Redirects Automatically
Here's an example of how to use HttpClient
with default settings that automatically handle redirects:
using System;
using System.Net.Http;
using System.Threading.Tasks;
class Program
{
static async Task Main(string[] args)
{
using (var httpClient = new HttpClient())
{
// Send a GET request
HttpResponseMessage response = await httpClient.GetAsync("http://example.com");
// The response will be the final response after following any redirects
if (response.IsSuccessStatusCode)
{
string content = await response.Content.ReadAsStringAsync();
Console.WriteLine(content);
}
}
}
}
Custom Redirect Handling
If you want to control the redirect behavior, you can configure the HttpClientHandler
as follows:
using System;
using System.Net.Http;
using System.Threading.Tasks;
class Program
{
static async Task Main(string[] args)
{
// Create an HttpClientHandler and configure it to handle redirects manually
var handler = new HttpClientHandler
{
AllowAutoRedirect = false // Disable automatic redirection
};
using (var httpClient = new HttpClient(handler))
{
// Send a GET request
HttpResponseMessage response = await httpClient.GetAsync("http://example.com");
// Manually check if the response is a redirection
if (response.StatusCode == System.Net.HttpStatusCode.Redirect ||
response.StatusCode == System.Net.HttpStatusCode.MovedPermanently ||
response.StatusCode == System.Net.HttpStatusCode.Found ||
response.StatusCode == System.Net.HttpStatusCode.SeeOther ||
response.StatusCode == System.Net.HttpStatusCode.TemporaryRedirect)
{
// Get the URL to redirect to
Uri redirectUrl = response.Headers.Location;
// Decide if you want to follow the redirect and make a new request
HttpResponseMessage redirectResponse = await httpClient.GetAsync(redirectUrl);
if (redirectResponse.IsSuccessStatusCode)
{
string content = await redirectResponse.Content.ReadAsStringAsync();
Console.WriteLine(content);
}
}
}
}
}
In the above code, AllowAutoRedirect
is set to false
, which means that HttpClient
will not follow redirects automatically. You can then check the response status code to see if it's a redirect and manually issue a new request to the URL specified in the Location
header.
Remember that manually handling redirects gives you more control to inspect and modify the request before following the redirect, but it also means you need to handle things like redirect loops and maximum redirect counts yourself.