8.2标准标头 / User-Agent / 相对地址

为了提升应用通过 HTTP 客户端发送网络请求的兼容性并避免被 WAF(Web 应用防火墙)拦截,框架提供了一键式配置方法,方便快速统一设置标准的请求头部:

启用标准请求标头#

为了提升应用通过 HTTP 客户端发送网络请求的兼容性并避免被 WAF(Web 应用防火墙)拦截,框架提供了一键式配置方法,方便快速统一设置标准的请求头部:

cs
// 为默认客户端配置services.AddHttpClient(string.Empty, client =>{    // 启用标准请求标头    client.UseStandardRequestHeaders();});

除了使用全局 HttpClient 配置,您还可以为单次请求配置特定设置,如下所示:

cs
HttpRequestBuilder.Get("https://furion.net/")    .UseStandardRequestHeaders(); // 启用标准请求标头

启用标准请求标头后,请求将自动添加以下头部:

  • Acceptapplication/jsontext/plain;q=0.9*/*;q=0.8(明确的媒体类型优先级,避免被 WAF 拦截)
  • Connection:启用持久连接(Keep-Alive),减少 TCP 连接建立和关闭的开销

设置默认 User-Agent#

在发送 HTTP 请求时,若用户未指定 User-Agent 请求头,框架将默认使用 Edge 浏览器(版本 142)的 User-Agent。示例如下:

text
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,可通过以下方式实现:

全局配置

cs
// 配置默认客户端的 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 字符串});

单次请求设置

cs
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.NETBlazorWeb 应用中,发送内部 HTTP 请求时,通常使用相对地址。然而,由于项目启动前无法获取主机地址和端口,无法直接通过 services.AddHttpClient() 配置 BaseAddress。此时,可以通过配置 HttpRemoteOptionsFallbackBaseAddress 来实现。

  • ASP.NET 应用
cs
services.AddHttpRemote()    .ConfigureOptions((options, serviceProvider) =>    {        var serverAddressesFeature = serviceProvider.GetRequiredService<IServer>().Features.Get<IServerAddressesFeature>()!;        options.FallbackBaseAddress = new Uri(serverAddressesFeature.Addresses.FirstOrDefault());    });
  • Blazor WebAssembly 应用
cs
services.AddHttpRemote()    .ConfigureOptions((options, serviceProvider) =>    {        var navigation = serviceProvider.GetRequiredService<NavigationManager>();        options.FallbackBaseAddress = new Uri(navigation.BaseUri);    });

通过上述配置,可以发送相对地址(内部)请求,示例如下:

cs
var content = await httpRemoteService.GetAsStringAsync("/user/1");  // 相对地址(内部)

在发送相对地址请求时,系统会自动获取 Web 主机启动时的主机地址和端口进行拼接。例如,最终发送的请求地址可能为:https://localhost:5001/user/1。这种方式简化了内部请求的配置,确保在项目启动时动态获取主机地址和端口,从而避免硬编码带来的维护问题。