gpt4 book ai didi

c# - 异步 Controller 操作发生错误时重定向用户

转载 作者:太空狗 更新时间:2023-10-29 23:07:30 25 4
gpt4 key购买 nike

我有一个 ASP.NET MVC 4 网络应用程序,它通过 WCF 服务从数据源检索数据。

我已将大部分 Controller 设置为Async,并将后续方法设置为基于Task

虽然我遇到了一个问题。如果我的代码中发生异常,正在加载的页面将继续加载并最终超时并显示 IIS 错误页面。

我设置了一条友好的错误消息,并且可以很好地用于 sync 操作,但不适用于 async 操作。即使在不同级别可能发生异常,操作也会继续运行。我尝试将 AsyncTimeout 属性应用于 Controller 操作,但没有成功,页面只是保持加载很长一段时间。

有什么想法可以在我的代码中处理这个问题,最好是在全局类型级别,并在 async Controller 操作出现问题时将用户引导至错误页面?

最佳答案

方法#1

在 Web.config 中将 customErrors 设置为 On 或 RemoteOnly

<system.web>
<customErrors mode="On" />
</system.web>

在自定义错误 View 中使用 HandleErrorAttribute

[AsyncTimeout(1000)]
[HandleError(ExceptionType=typeof(System.TimeoutException), View="Timeout")]
public async Task<ActionResult> AsyncActionResultReport()
{

方法#2

覆盖异步 Controller 的 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);
}

关于c# - 异步 Controller 操作发生错误时重定向用户,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24071800/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com