![](/img/trans.png)
[英]Asp.net MVC5 Application_Start happens every request - sometimes multiple times per request
[英]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.TimedOutToken和Response.ClientDisconnectedToken属性获取这些令牌。
这篇博客文章对我有很大帮助。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.