为了账号安全,请及时绑定邮箱和手机立即绑定

如何从mvc中的异步方法重定向到页面

如何从mvc中的异步方法重定向到页面

C#
jeck猫 2023-07-09 17:55:24
当 API 响应时间较长(例如 60 秒)时,我想重定向到“ https://www.mydomain/Timeout ”之类的错误页面。从 API 获取响应的逻辑是在同一 VS 解决方案中 ServiceLayer 项目中的异步方法中编写的。该异步方法正在非异步控制器中调用(存在于同一 VS 解决方案的 Web 项目中)。当我检查异步方法中的时间并在此基础上在控制器中执行 Response.Redirect 时,它就可以工作了。但是,我想在异步方法中执行此操作,因为这是由大约 50 个 API 调用的方法。因此,我不想在每个控制器中执行 Response.Redirect,而是想从这里处理它,以便它适用于每个 API。现在请帮我看看该怎么做?我尝试将 Response.Redirect(" https://www.mydomain/timeout ") 放入异步方法中,但这不起作用。我也尝试过 Server.Transfer 但没有运气。这是由于异步方法造成的吗?下面是用异步方法编写的从 API 获取响应的代码。private async Task<T1> PostA<T1,T2>(string method, T2 request, string api,            bool isPut){  Stopwatch sw = new Stopwatch();  sw.Start();        var response = isPut ?                await client.PutAsync(parturl,                  body).ConfigureAwait(continueOnCapturedContext: false) :               await client.PostAsync(parturl,                  body).ConfigureAwait(continueOnCapturedContext: false);  sw.Stop();  long elapsedTime = sw.ElapsedMilliseconds;  if (elapsedTime >= 60000)  {     Response.Redirect("https://www.mydomain/timeout")  }}在该方法中,我仅向您展示了所需的代码,其余逻辑已被删除。
查看完整描述

1 回答

?
喵喵时光机

TA贡献1846条经验 获得超7个赞

我如何根据上述评论遵循该方法:

  1. Dictionary<string, bool> d= new Dictionary<string, bool>();我在编写 API 调用方法的类中创建了一个静态字典,例如,MyApiClass

  2. 我将代码行client.timeout= [your time here in milliseconds]; 用于 API 发送请求。

  3. 当 API 超时时,它会抛出异常TaskTimeoutException,因此我捕获了异常并将代码放入 catch 块中,如下所示d.Add("timeout", true);

  4. 我创建了自定义操作过滤器并应用了以下代码:

    public class CustomActionFilter : ActionFilterAttribute{
        public override void OnActionExecuted(ActionExecutedContext filterContext)
        {        if(MyApiClass.d.ContainsKey("timeout") && d["timeout"])
            {
                        throw new Exception();
            }
        }
    }
  5. 我把它应用[CustomActionFilter]到了动作上。

  6. 当执行操作并输入自定义过滤器时,它会通过检查字典条目抛出异常。现在,我们Application_Error()Global.asax.cs中捕获了异常。

  7. Application_Error()我们编写了重定向到所需页面的代码。

注意:在步骤 4 中,您可以创建自定义异常以提供更精确的日志记录详细信息。


    查看完整回答
    反对 回复 2023-07-09
    • 1 回答
    • 0 关注
    • 110 浏览

    添加回答

    举报

    0/150
    提交
    取消
    意见反馈 帮助中心 APP下载
    官方微信