У меня есть веб-API ASP.Net С# с конечной точкой для импорта. Клиент Javascript отправляет список элементов в этот API, и API обрабатывает этот список в другом потоке (длинная задача) и немедленно возвращает уникальный идентификатор (GUID) процесса. Теперь мне нужно отменить фоновую задачу из КЛИЕНТА. Можно ли как-то отправить токен отмены с клиента? Я попытался добавить CancellationToken в качестве параметра в асинхронное действие моего контроллера, но я не знаю, как передать его от клиента. Для упрощения мы можем использовать в качестве клиента приложение Postman.
Пример на стороне сервера
[HttpPost]
[UserContextActionFilter]
[RequestBodyType(typeof(List<List<Item>>))]
[Route("api/bulk/ImportAsync")]
public async Task<IHttpActionResult> ImportAsync()
{
var body = await RequestHelper.GetRequestBody(this);
var queue = JsonConvert.DeserializeObject<List<List<Item>>>(body);
var resultWrapper = new AsynckResultWrapper(queue.Count);
HostingEnvironment.QueueBackgroundWorkItem(async ct =>
{
foreach (var item in queue)
{
var result = await ProcessItemList(item, false);
resultWrapper.AddResultItem(result);
}
});
return Ok(new
{
ProcessId = resultWrapper.ProcessId.ToString()
});
}
private async Task<ItemResult> ProcessItemList(<List<Item>>itemList, bool runInOneTransaction = false)
{
try
{
var result = await PerformBulkOperation(true, itemList);
return new ResultWrapper(result);
}
catch (Exception ex)
{
// process exception
return new ResultWrapper(ex);
}
}