6.19CancellationToken 取消请求

框架为所有发送 HTTP 远程请求的方法提供了取消功能,只需通过 cancellationToken 参数即可实现。以下是三种取消请求的方法示例:

框架为所有发送 HTTP 远程请求的方法提供了取消功能,只需通过 cancellationToken 参数即可实现。以下是三种取消请求的方法示例:

  • 在控制器 Action 中定义 CancellationToken 参数

当用户关闭浏览器或中断请求时,可以取消 HTTP 远程请求操作。

cs
[ApiController][Route("[controller]/[action]")]public class HttpRemoteController(IHttpRemoteService httpRemoteService) : ControllerBase{    [HttpGet]    public async Task<string?> GetContent(CancellationToken cancellationToken)    {        await httpRemoteService.GetAsAsync<string>("https://furion.net/", cancellationToken: cancellationToken);    }}
  • 利用 HttpContext.RequestAborted 属性

当用户关闭浏览器或中断请求时,可以取消 HTTP 远程请求操作。

cs
[ApiController][Route("[controller]/[action]")]public class HttpRemoteController(IHttpRemoteService httpRemoteService,    IHttpContextAccessor httpContextAccessor) : ControllerBase{    [HttpGet]    public async Task<string?> GetContent()    {        await httpRemoteService.GetAsAsync<string>("https://furion.net/"            , cancellationToken: httpContextAccessor.HttpContext.RequestAborted);    }}
  • 创建 CancellationTokenSource 对象以手动取消请求

创建 CancellationTokenSource 实例可以精准的控制取消 HTTP 请求的时机。

cs
[ApiController][Route("[controller]/[action]")]public class HttpRemoteController(IHttpRemoteService httpRemoteService) : ControllerBase{    [HttpGet]    public async Task<string?> GetContent()    {        using var cancellationTokenSource = new CancellationTokenSource();        cancellationTokenSource.CancelAfter(100);        await httpRemoteService.GetAsAsync<string>("https://furion.net/"            , cancellationToken: cancellationTokenSource.Token);    }}