5.3返回值类型与跟踪标识

在 HTTP 声明式请求接口方法中,除了支持常见的 HTTP 响应类型如 string、byte[]、Stream、HttpRequestMessage、HttpResponseMessage、void、IAsyncEnumerable 和 IActionResult 以及它们的异步版本(Task/Task/Value

定义返回值类型#

HTTP 声明式请求接口方法中,除了支持常见的 HTTP 响应类型如 stringbyte[]StreamHttpRequestMessageHttpResponseMessagevoidIAsyncEnumerable<T>IActionResult<T> 以及它们的异步版本(Task/Task<T>/ValueTask/ValueTask<T>)外,还支持自定义类型和框架内置的 HttpRemoteResult<T>HttpRequestBuilderVoidContent 类型及其异步版本。

cs
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 实例所需的跟踪标识配置。

cs
// 在接口定义上应用,影响所有方法[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 类型)。