8.5重定向响应处理
创建于 2026 年 8 月 17 日约 2 分钟读完
在发送 HTTP 远程请求时,若目标服务器返回重定向响应(如 301 Moved Permanently、302 Found 等),框架默认会自动跟随重定向。为精确处理这些情况,可参考以下方案:
- 通过
HttpRemoteOptions全局启用或禁用自动重定向
在发送 HTTP 远程请求时,若目标服务器返回重定向响应(如 301 Moved Permanently、302 Found 等),框架默认会自动跟随重定向。要启用或禁用这一行为,可以通过以下配置进行设置:
services.AddHttpRemote(builder => {}) .ConfigureOptions(options => { // 设置指示请求是否应遵循重定向响应,默认 true options.AllowAutoRedirect = false; // 设置请求所遵循的最大重定向数,默认 50 次 options.MaximumAutomaticRedirections = 50; });- 通过
HttpClient全局启用或禁用自动重定向
若希望或不希望 HttpClient 自动处理重定向,可通过配置 HttpClientHandler 或 SocketsHttpHandler 来启用或禁用此功能。
// 配置默认客户端services.AddHttpClient(string.Empty) .ConfigurePrimaryHttpMessageHandler(() => new SocketsHttpHandler { AllowAutoRedirect = true, // 允许自动重定向,默认为 true (允许) MaxAutomaticRedirections = 20 // 设置最大重定向次数 });- 通过手动处理重定向
也可以检查响应状态码。若状态码在 300-399 范围内,表明为重定向状态码,此时可手动解析 Location 头,并使用该地址重新发送请求。
- 禁用
HttpClient的自动重定向功能
// 配置默认客户端services.AddHttpClient(string.Empty) .ConfigurePrimaryHttpMessageHandler(() => new SocketsHttpHandler { AllowAutoRedirect = false });- 手动管理重定向流程
var responseMessage = await httpRemoteService.GetAsync("https://furion.net/redirect");// 检查响应消息是否包含重定向状态码var statusCode = responseMessage.StatusCode;// 通常应使用 while 循环来进行判断,因为可能涉及多次重定向if (statusCode is HttpStatusCode.Ambiguous or HttpStatusCode.Moved or HttpStatusCode.Redirect or HttpStatusCode.RedirectMethod or HttpStatusCode.RedirectKeepVerb || (int)statusCode == 308){ // 获取重定向地址 var redirectUrl = responseMessage.Headers.Location; if (redirectUrl != null) { // 用新的 URL 再次发送请求 response = await httpRemoteService.GetAsync(redirectUrl); }}选择哪种方法取决于您的具体需求。如果你需要更细粒度地控制每个重定向过程,比如记录日志或执行特定逻辑,那么手动处理可能是更好的选择。如果只是简单地想要让客户端自动处理所有重定向,则开启自动重定向更加方便。