繁体   English   中英

有没有办法在不使用Thread.Sleep的情况下延迟ASP.NET MVC 4中的HTTP响应?

[英]Is there a way to delay an HTTP response in ASP.NET MVC 4 without using Thread.Sleep?

我想延迟我的网站身份验证请求的响应,以便服务器在收到请求时的特定秒数偏移处开始响应。

例如,如果用户进行身份验证,在04:00:00 ,我想响应回来在04:00:05 ,没有早也不晚。 如果代码无法满足截止日期,我希望它导致错误。

这必须在服务器端完成,我想避免使用Thread.Sleep 虽然,我认为可能有一种方法可以使用异步控制器并在请求的部分继续使用Thread.Sleep

这里有没有人面临类似的挑战,你的解决方案是什么?

你们中的任何人都可以想到一种方法来避免Thread.Sleep并保持响应能力吗?

您可以在MVC 4中使用Async支持 (如果您使用的是MVC 3,则可以使用AsyncController)

public async Task<ActionResult> GizmosAsync()
{
    var gizmoService = new GizmoService();
    return View("Gizmos", await gizmoService.GetGizmosAsync());
}

然后,等待中的方法可以使用它所需的时间,包括Thread.Sleep。

这样,您就不会阻止ASP.net处理其他请求。

您可以使用自定义ActionFilters。

  • 记录请求到达OnActionExecuting方法的时间。
  • 然后在OnResultExecuted方法上检查结果。 如果它是一个有效的响应让它通过,如果它是一个未授权的响应延迟它使用Thread.Sleep与所需的延迟基于记录的开始时间。

如果您使用的是全局过滤器而非属性,请确保您的过滤器在授权过滤器([授权]?)之前运行或在其之前注册。

这样延迟对授权用户没有影响,我认为这是你不想使用Thread.Sleep的原因。 请注意,默认情况下Thread.Sleep不是很准确(大约20ms),但客户端的网络延迟应该模糊不清。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM