繁体   English   中英

如何在ASP.NET MVC5应用程序中处理请求超时?

[英]How to handle a request timeout in ASP.NET MVC5 application?

到目前为止,我已经尝试了以下方法-1)添加了自定义属性以处理超时。

 public class TimeOutFilter : ActionFilterAttribute
{
    public override void OnActionExecuting(ActionExecutingContext filterContext)
    {
        System.Web.HttpContext.Current.GetType().GetField("_timeoutState", System.Reflection.BindingFlags.Instance |
        System.Reflection.BindingFlags.NonPublic).SetValue(System.Web.HttpContext.Current, 1);

        base.OnActionExecuting(filterContext);
    }
}

在Global.asax中添加了以下内容

filters.Add(new TimeOutFilter());

使用[TimeOutFilter]属性来装饰控制器

2)添加了AsyncTimeout属性来装饰控制器/动作,如下所示:

[AsyncTimeout(10)]

3)将executionTimeout设置为web.config文件中的值。

<httpRuntime targetFramework="4.5" maxRequestLength="10240" executionTimeout="10" />

4)在控制器中将HttpContext.Server.ScriptTimeout设置为某个值。

HttpContext.Server.ScriptTimeout = 10;

使用第1点中的步骤,我可以根据请求超时将用户重定向到“登录”屏幕。 但这不是我想要的。

我正在寻找请求超时发生时获取或触发异常的方法。

有人可以让我知道我们是否可以这样做吗?

不要使用粗鲁的线程中止行为 (1)和(4)。

AsyncTimeout属性(2)很好,但是仅声明超时持续时间(如web.config(3)中的executionTimeout)。

在mvc5的完全异步管道中,这只是使操作超时的一种有效方法:使用CancellationTokens抛出!

您可以通过参数或使用Request.TimedOutTokenResponse.ClientDisconnectedToken属性获取这些令牌。

这篇博客文章对我有很大帮助。

暂无
暂无

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

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