5.40获取请求构建器或请求消息(预检请求)
创建于 2026 年 8 月 17 日约 2 分钟读完
在某些情况下,您可能希望只获取 HTTP 请求对象本身,而不实际发送请求。例如:在单元测试中验证生成的请求是否符合预期,或拿到请求构建器后进一步手动修改,亦或是将请求消息传递给另一个系统执行。
为此,当发送 HTTP 远程请求的方法的返回类型为 HttpRequestBuilder 或 HttpRequestMessage 时,框架将直接构建并返回该对象,跳过实际的网络传输。示例如下:
public interface IHttpService : IHttpDeclarative{ // HttpRequestBuilder 类型,不发送请求(预检请求) [Get("https://furion.net/")] Task<HttpRequestBuilder> GetRequestBuilderAsync(); // HttpRequestMessage 类型,不发送请求(预检请求) [Get("https://furion.net/")] Task<HttpRequestMessage> GetRequestMessageAsync();}调用时直接获取对象:
// 获取构建器,可继续链式配置后手动发送var builder = await httpService.GetRequestBuilderAsync(); // 不发送请求builder.WithHeader("X-Custom", "value");var httpResponseMessage = await httpRemoteService.SendAsync(builder); // 发起网络请求// 获取 HttpRequestMessage,用于断言或外部传递var httpRequestMessage = await httpService.GetRequestMessageAsync(); // 不发送请求Assert.Equal("https://furion.net/", httpRequestMessage.RequestUri?.ToString());应用场景
- 预检请求(Pre-flight Check):在正式发送前,检查生成的请求对象是否符合预期。确认
URL、请求头、Token注入等都正确无误后,再手动发送或继续处理。 - 单元测试:无需模拟网络环境,直接验证生成的
HttpRequestMessage是否包含了正确的参数、头和认证信息。 - 请求对象传递:将构造好的
HttpRequestMessage传递给其他服务、库或进程执行,实现请求构造与请求执行的分离。 - 混合编程:先通过构建器或声明式完成大部分配置(参数映射、
Token注入等),再拿到构建器进行少量动态修改后手动发送,兼顾声明式的简洁与命令式的灵活。