IHttpClientService.cs 2.34 KB
namespace Rcs.Application.Shared;

/// <summary>
/// HTTP客户端服务接口
/// </summary>
public interface IHttpClientService
{
    /// <summary>
    /// 发送GET请求
    /// </summary>
    Task<TResponse?> GetAsync<TResponse>(string url, Dictionary<string, string>? headers = null, CancellationToken cancellationToken = default);

    /// <summary>
    /// 发送POST请求
    /// </summary>
    Task<TResponse?> PostAsync<TRequest, TResponse>(string url, TRequest data, Dictionary<string, string>? headers = null, CancellationToken cancellationToken = default);

    /// <summary>
    /// 发送PUT请求
    /// </summary>
    Task<TResponse?> PutAsync<TRequest, TResponse>(string url, TRequest data, Dictionary<string, string>? headers = null, CancellationToken cancellationToken = default);

    /// <summary>
    /// 发送DELETE请求
    /// </summary>
    Task<TResponse?> DeleteAsync<TResponse>(string url, Dictionary<string, string>? headers = null, CancellationToken cancellationToken = default);

    /// <summary>
    /// 发送PATCH请求
    /// </summary>
    Task<TResponse?> PatchAsync<TRequest, TResponse>(string url, TRequest data, Dictionary<string, string>? headers = null, CancellationToken cancellationToken = default);

    /// <summary>
    /// 发送POST请求(无返回值)
    /// </summary>
    Task<HttpResponseMessage> PostAsync<TRequest>(string url, TRequest data, Dictionary<string, string>? headers = null, CancellationToken cancellationToken = default);

    /// <summary>
    /// 发送PUT请求(无返回值)
    /// </summary>
    Task<HttpResponseMessage> PutAsync<TRequest>(string url, TRequest data, Dictionary<string, string>? headers = null, CancellationToken cancellationToken = default);

    /// <summary>
    /// 发送DELETE请求(无返回值)
    /// </summary>
    Task<HttpResponseMessage> DeleteAsync(string url, Dictionary<string, string>? headers = null, CancellationToken cancellationToken = default);

    /// <summary>
    /// 下载文件流
    /// @author zzy
    /// </summary>
    /// <param name="url">文件URL</param>
    /// <param name="headers">请求头</param>
    /// <param name="cancellationToken">取消令牌</param>
    /// <returns>文件流</returns>
    Task<Stream> DownloadStreamAsync(string url, Dictionary<string, string>? headers = null, CancellationToken cancellationToken = default);
}