ama*_*eur 5 c# asp.net-mvc wcf asynchronous task
我有一个ASP.NET MVC 4 Web应用程序,它通过WCF服务从数据源中检索数据.
我已经设置了大多数控制器Async和后续方法Task.
我遇到了一个问题.如果我的代码中发生异常,则正在加载的页面将继续加载,并在最后超时显示IIS错误页面.
我有一个友好的错误信息设置,并适用于sync行动但不适用async.即使可能在不同级别发生异常,操作也会继续运行.我尝试将该AsyncTimeout属性应用于控制器操作,但没有运气,页面只是长时间加载.
任何想法如何在我的代码中处理这个问题,最好是在全局类型级别,并在async控制器操作出现问题时将用户引导到错误页面?
在 Web.config 中将 customErrors 设置为 On 或 RemoteOnly
<system.web>
<customErrors mode="On" />
</system.web>
Run Code Online (Sandbox Code Playgroud)
将 HandleErrorAttribute 与自定义错误视图结合使用
[AsyncTimeout(1000)]
[HandleError(ExceptionType=typeof(System.TimeoutException), View="Timeout")]
public async Task<ActionResult> AsyncActionResultReport()
{
Run Code Online (Sandbox Code Playgroud)
重写异步控制器的 OnException 方法,或使用自定义异常属性
public override void OnException(ExceptionContext filterContext)
{
if(filterContext.Exception is TimeoutException && filterContext.Controller is AsyncController)
{
filterContext.HttpContext.Response.StatusCode = 200;
filterContext.Result = new RedirectToRouteResult(
new RouteValueDictionary {
{ "Controller", "Home" },
{ "Action", "TimeoutRedirect" }
filterContext.ExceptionHandled = true;
}
base.OnException(filterContext);
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1396 次 |
| 最近记录: |