asp.net-core – 在ASP.NET Core MVC中,浏览器中止没有中止(取消
我编写了以下MVC控制器来测试取消功能:
class MyController : Controller { [HttpGet("api/CancelTest")] async Task<IActionResult> Get() { await Task.Delay(1000); CancellationToken token = HttpContext.RequestAborted; bool cancelled = token.IsCancellationRequested; logger.LogDebug(cancelled.ToString()); return Ok(); } } 说,我想取消请求,因此在上面的控制器操作中记录值’true’.如果服务器实现IHttpRequestLifetimeFeature,这可能是服务器端.幸运的是,Kestrel确实如此,这可以通过以下方式实现: var feature = (IHttpRequestLifetimeFeature) HttpContext.Features[typeof(IHttpRequestLifetimeFeature)]; feature.Abort(); 但问题是我想在客户端取消请求.例如,在浏览器中.在ASP.NET MVC / WebApi的预核版本中,如果浏览器中止请求,则取消令牌将自动取消.示例:在Chrome中多次刷新页面.在chrome dev工具的“网络”选项卡中,您现在可以看到取消上一个(未完成的)请求. 问题是:在Kestrel上运行的ASP.NET Core中,我只能在日志中看到以下条目:
因此,来自浏览器的中止请求到达并由Kestrel网络服务器处理.但它不会影响控制器中HttpContext的RequestAborted属性,因为该方法仍会记录值’false’. 题: 也许我可以做一些订阅Kestrel的操作取消触发器并调用IHttpRequestLifetimeFeature.Abort()方法的东西? 更新: 更多更新: 解决方法
事实证明,简单地使用HttpContext.RequestAborted确实是正确的方法,但是由于Kestrel中的错误(处理FIN / RST包的顺序),请求在浏览器中止时没有中止.
最终应该在Kestrel 2.0中修复该错误. 有关详细信息,请参阅我的问题中的更新. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- asp-classic – 超过响应缓冲区限制
- asp.net – ActiveDirectoryMembershipProvider – “无法建
- ASP.NET,jQuery,脏窗体和window.onbeforeunload
- 将ASP.NET引入Thinking Request是Ajax请求jQuery文件上传
- ASP.NET MVC是否使Web表单成为旧版平台?
- asp.net-mvc – MVC5在不使用System.Web的情况下读取Config
- asp.net – ViewState vs cookies vs cashing vs sessions
- asp-classic – ADODB.Stream错误’800a0bbc’写入文件失败
- ASP.Net发布超时
- asp.net – 防止加载MicrosoftAjaxWebForms.debug.js