亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如何從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?,F在請幫我看看該怎么做?我嘗試將 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. 當執行操作并輸入自定義過濾器時,它會通過檢查字典條目拋出異?!,F在,我們Application_Error()Global.asax.cs中捕獲了異常。

  7. Application_Error()我們編寫了重定向到所需頁面的代碼。

注意:在步驟 4 中,您可以創建自定義異常以提供更精確的日志記錄詳細信息。


    查看完整回答
    反對 回復 2023-07-09
    • 1 回答
    • 0 關注
    • 146 瀏覽

    添加回答

    舉報

    0/150
    提交
    取消
    微信客服

    購課補貼
    聯系客服咨詢優惠詳情

    幫助反饋 APP下載

    慕課網APP
    您的移動學習伙伴

    公眾號

    掃描二維碼
    關注慕課網微信公眾號