8.2标准标头 / User-Agent / 相对地址
为了提升应用通过 HTTP 客户端发送网络请求的兼容性并避免被 WAF(Web 应用防火墙)拦截,框架提供了一键式配置方法,方便快速统一设置标准的请求头部:
启用标准请求标头#
为了提升应用通过 HTTP 客户端发送网络请求的兼容性并避免被 WAF(Web 应用防火墙)拦截,框架提供了一键式配置方法,方便快速统一设置标准的请求头部:
// 为默认客户端配置services.AddHttpClient(string.Empty, client =>{ // 启用标准请求标头 client.UseStandardRequestHeaders();});除了使用全局 HttpClient 配置,您还可以为单次请求配置特定设置,如下所示:
HttpRequestBuilder.Get("https://furion.net/") .UseStandardRequestHeaders(); // 启用标准请求标头启用标准请求标头后,请求将自动添加以下头部:
Accept:application/json、text/plain;q=0.9、*/*;q=0.8(明确的媒体类型优先级,避免被WAF拦截)Connection:启用持久连接(Keep-Alive),减少TCP连接建立和关闭的开销
设置默认 User-Agent#
在发送 HTTP 请求时,若用户未指定 User-Agent 请求头,框架将默认使用 Edge 浏览器(版本 142)的 User-Agent。示例如下:
Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/142.0.0.0 Safari/537.36 Edg/142.0.0.0如需自定义默认 User-Agent,可通过以下方式实现:
全局配置:
// 配置默认客户端的 User-Agentservices.AddHttpClient(string.Empty, client =>{ client.DefaultRequestHeaders.Add("User-Agent", UserAgents.Chrome.PC); // 推荐使用 UserAgents 静态类设置 // client.DefaultRequestHeaders.Add("User-Agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/142.0.0.0 Safari/537.36 Edg/142.0.0.0"); // 或直接设置 User-Agent 字符串});单次请求设置:
HttpRequestBuilder.Post("https://furion.net/") .SetUserAgent(UserAgents.Chrome.PC); // 推荐使用 UserAgents 静态类设置 // .SetUserAgent("Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/142.0.0.0 Safari/537.36 Edg/142.0.0.0"); // 或直接设置 User-Agent 字符串 // .WithHeader("User-Agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/142.0.0.0 Safari/537.36 Edg/142.0.0.0", replace: true); // 或使用 WithHeader 方法发送相对地址(内部)请求#
在 ASP.NET 或 Blazor 等 Web 应用中,发送内部 HTTP 请求时,通常使用相对地址。然而,由于项目启动前无法获取主机地址和端口,无法直接通过 services.AddHttpClient() 配置 BaseAddress。此时,可以通过配置 HttpRemoteOptions 的 FallbackBaseAddress 来实现。
ASP.NET应用
services.AddHttpRemote() .ConfigureOptions((options, serviceProvider) => { var serverAddressesFeature = serviceProvider.GetRequiredService<IServer>().Features.Get<IServerAddressesFeature>()!; options.FallbackBaseAddress = new Uri(serverAddressesFeature.Addresses.FirstOrDefault()); });Blazor WebAssembly应用
services.AddHttpRemote() .ConfigureOptions((options, serviceProvider) => { var navigation = serviceProvider.GetRequiredService<NavigationManager>(); options.FallbackBaseAddress = new Uri(navigation.BaseUri); });通过上述配置,可以发送相对地址(内部)请求,示例如下:
var content = await httpRemoteService.GetAsStringAsync("/user/1"); // 相对地址(内部)在发送相对地址请求时,系统会自动获取 Web 主机启动时的主机地址和端口进行拼接。例如,最终发送的请求地址可能为:https://localhost:5001/user/1。这种方式简化了内部请求的配置,确保在项目启动时动态获取主机地址和端口,从而避免硬编码带来的维护问题。