我在一个项目中有一个当前正在运行的控制器方法,如下所示:
[HttpGet]
public async Task<IHttpActionResult> GetReport([FromUri] ReportParamiters ReportRequest, CancellationToken cancellationToken)
{…}
但是可以使用以下内容从另一个项目调用此项来进行传递调用,具体取决于调用者的位置/位置:
[HttpGet]
public async Task<HttpResponseMessage> GetReport([FromUri] ReportParameters ReportParameters, CancellationToken cancellationToken)
{
using(HttpClient client = this.MessageTransferHelper.BuildJsonHttpClient(Helper.BearerToken(this.Url.Request.Headers.Authorization.ToString())))
{
HttpResponseMessage response =
await
client.GetAsync(this.ConfigurationService.ReportsUrl() + "report1/?DateFrom=" +
ReportParameters.DateFrom.ToString("MM-dd-yyyy") + "&DateTo=" + ReportParameters.DateTo.ToString("MM-dd-yyyy") +
"&valueList=" + String.Join("&valueList=", ReportParameters.Stores.ToArray()));
return response;
第二个示例只是创建url并将其传递给第一个示例中保存的实际控制器,并返回结果。我已经在谷歌搜索了这个问题的答案,但无法找到匹配的内容。
我可以创建一个传递到第二个示例的GET中的取消令牌,如图所示,然后将其(以及相关的搜索信息)传递到另一个GET中吗? (在另一台远程服务器上运行)
答案 0 :(得分:1)
你当然可以pass a CancellationToken
to GetAsync
。它不会是远程服务器将获得的相同的取消令牌,但它们将在逻辑上连接。
如果调用进程关闭HTTP套接字,则可以(1)触发远程CancellationToken
中的GetReport
。本地GetReport
可以将CancellationToken
传递给HttpClient
,这会导致它通过关闭其套接字来取消请求。如果本地GetReport
传递了它所获得的CancellationToken
,那么以下应该(1)发生:
GetReport
的呼叫者(即最终用户浏览器)取消其请求(即用户关闭浏览器选项卡),则本地GetReport
的{{1}是(1)被取消。CancellationToken
取消其请求。HttpClient
的{{1}}取消。(1)应理论上取消。实际上,在ASP.NET取消中有一个老鼠的漏洞,最终结果是取消并非真正保证发生。我希望这将在ASP.NET Core中修复。