6.19CancellationToken 取消请求
框架为所有发送 HTTP 远程请求的方法提供了取消功能,只需通过 cancellationToken 参数即可实现。以下是三种取消请求的方法示例:
框架为所有发送 HTTP 远程请求的方法提供了取消功能,只需通过 cancellationToken 参数即可实现。以下是三种取消请求的方法示例:
- 在控制器
Action中定义CancellationToken参数:
当用户关闭浏览器或中断请求时,可以取消 HTTP 远程请求操作。
[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 远程请求操作。
[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 请求的时机。
[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); }}