客户端可以取消 Web Api 请求吗?
Can a client cancel a Web Api request?
我的网络 api 控制器中有以下方法(长 运行ning 方法支持取消令牌,即如果请求取消,它们不会 运行):
public async Task<IHttpActionResult> ApiMethod(CancellationToken cancellationToken)
{
await LongRunningNetworkOperation1(cancellationToken);
await LongRunningNetworkOperation2(cancellationToken);
return Ok();
}
客户端有以下代码调用我的webapi控制器:
using (var httpClient = new HttpClient())
{
httpClient.Timeout = TimeSpan.FromMilliseconds(3000);
try
{
// Sending DELETE request
HttpResponseMessage deleteMessage = await httpClient.
DeleteAsync("http://localhost:80/api/apiMethod");
}
catch (Exception e)
{
// Timeout occurred.
}
}
如果在调用"LongRunningNetworkOperation2"之前客户端请求超时,cancellationToken是否会阻止"LongRunningNetworkOperation2"从运行ning?换句话说,客户端可以向网络发出信号 api 以停止 运行 某个请求吗?
can the client signal the web api to stop running a certain request?
理论上是的。取消 HttpClient
应该关闭基础 TCP/IP 连接。作为响应,ASP.NET 堆栈应检测到其客户端丢失,并取消 WebAPI CancellationToken
.
实际上,这取决于您使用的 HttpClient
和 WebAPI
实现的完整程度。取消不一定保证,但我希望它至少适用于桌面 HttpClient
。
我的网络 api 控制器中有以下方法(长 运行ning 方法支持取消令牌,即如果请求取消,它们不会 运行):
public async Task<IHttpActionResult> ApiMethod(CancellationToken cancellationToken)
{
await LongRunningNetworkOperation1(cancellationToken);
await LongRunningNetworkOperation2(cancellationToken);
return Ok();
}
客户端有以下代码调用我的webapi控制器:
using (var httpClient = new HttpClient())
{
httpClient.Timeout = TimeSpan.FromMilliseconds(3000);
try
{
// Sending DELETE request
HttpResponseMessage deleteMessage = await httpClient.
DeleteAsync("http://localhost:80/api/apiMethod");
}
catch (Exception e)
{
// Timeout occurred.
}
}
如果在调用"LongRunningNetworkOperation2"之前客户端请求超时,cancellationToken是否会阻止"LongRunningNetworkOperation2"从运行ning?换句话说,客户端可以向网络发出信号 api 以停止 运行 某个请求吗?
can the client signal the web api to stop running a certain request?
理论上是的。取消 HttpClient
应该关闭基础 TCP/IP 连接。作为响应,ASP.NET 堆栈应检测到其客户端丢失,并取消 WebAPI CancellationToken
.
实际上,这取决于您使用的 HttpClient
和 WebAPI
实现的完整程度。取消不一定保证,但我希望它至少适用于桌面 HttpClient
。