5.3返回值类型与跟踪标识
在 HTTP 声明式请求接口方法中,除了支持常见的 HTTP 响应类型如 string、byte[]、Stream、HttpRequestMessage、HttpResponseMessage、void、IAsyncEnumerable 和 IActionResult 以及它们的异步版本(Task/Task/Value
定义返回值类型#
在 HTTP 声明式请求接口方法中,除了支持常见的 HTTP 响应类型如 string、byte[]、Stream、HttpRequestMessage、HttpResponseMessage、void、IAsyncEnumerable<T> 和 IActionResult<T> 以及它们的异步版本(Task/Task<T>/ValueTask/ValueTask<T>)外,还支持自定义类型和框架内置的 HttpRemoteResult<T>、HttpRequestBuilder 和 VoidContent 类型及其异步版本。
public interface IHttpService : IHttpDeclarative{ // 字符串类型 [Get("https://furion.net/")] Task<string> GetStringAsync(); [Get("https://furion.net/")] string GetString(); // 字节数组类型 [Get("https://furion.net/")] Task<byte[]> GetBytesAsync(); [Get("https://furion.net/")] byte[] GetBytes(); // Stream 类型 [Get("https://furion.net/")] Task<Stream> GetStreamAsync(); [Get("https://furion.net/")] Stream GetStream(); // HttpResponseMessage 类型 [Get("https://furion.net/")] Task<HttpResponseMessage> GetHttpResponseMessageAsync(); [Get("https://furion.net/")] HttpResponseMessage GetHttpResponseMessage(); // 无返回值 [Get("https://furion.net/")] Task GetVoidAsync(); [Get("https://furion.net/")] void GetVoid(); [Get("https://furion.net/")] Task<VoidContent> GetVoidContentAsync(); [Get("https://furion.net/")] VoidContent GetVoidContent(); // 框架内置 HttpRemoteResult<T> 类型 [Get("https://furion.net/")] Task<HttpRemoteResult<string>> GetHttpRemoteResultAsync(); [Get("https://furion.net/")] HttpRemoteResult<string> GetHttpRemoteResult(); // IActionResult<T> 类型 [Get("https://furion.net/")] Task<IActionResult> GetYourModelAsync(); [Get("https://furion.net/")] IActionResult GetYourModel(); // IAsyncEnumerable<T> 类型 [Get("https://furion.net/")] IAsyncEnumerable<string> GetAsyncEnumerable(); // 自定义类型 [Get("https://furion.net/")] Task<YourModel> GetYourModelAsync(); [Get("https://furion.net/")] YourModel GetYourModel(); // ValueTask/ValueTask<T> 类型 [Post("https://furion.net/user/add")] ValueTask PostDataAsync(object data); [Get("https://furion.net/")] ValueTask<string> GetValueTaskAsync(); // HttpRequestBuilder 类型,不发送请求(预检请求) [Get("https://furion.net/")] Task<HttpRequestBuilder> GetRequestBuilderAsync(); // HttpRequestMessage 类型,不发送请求(预检请求) [Get("https://furion.net/")] Task<HttpRequestMessage> GetRequestMessageAsync();}设置跟踪标识#
为请求指定一个唯一标识符,便于跟踪和调试。该标识符将被设置在 X-Trace-ID 请求标头中。
HTTP 声明式请求通过 TraceIdentifierAttribute 特性来设置跟踪标识。相应的 HTTP 声明式提取器实现为 TraceIdentifierDeclarativeExtractor 类型,该类型负责解析 TraceIdentifierAttribute 特性并构建 HttpRequestBuilder 实例所需的跟踪标识配置。
// 在接口定义上应用,影响所有方法[TraceIdentifier("your-id")]public interface IHttpService : IHttpDeclarative{ [Get("https://furion.net/")] Task<string> GetStringAsync(); // 在方法上应用 [TraceIdentifier("your-method-id")] [Get("https://furion.net/")] Task<string> GetStringAsync();}TraceIdentifierAttribute 包含以下构造函数和属性:
-
构造函数:
new(traceIdentifier):作用于方法或接口,设置跟踪标识。
-
属性:
Identifier:跟踪标识(string类型)。