api調用阻止了新頁面的加載


0

我有一個包含兩個頁面(A和B)的網站。兩者都有一些通過渲染加載的內容。A有一個按鈕,可在新選項卡中打開B。A還具有一些調用我的API的前端代碼,該前端代碼又調用了一個外部API來獲取一些數據。該數據將顯示在頁面A上。頁面B不依賴於該數據。所有這些都是異步發生的,使用戶可以單擊按鈕,以在新選項卡中打開頁面B。

問題在於,儘管新標籤頁打開,但直到頁面A加載了所有數據後,頁面B才加載。

在調查此問題時,我發現直到完成頁面A上的API為止,頁面B上的呈現才調用已分配的控制器動作。

有人知道如何解決嗎?

我正在使用sitecore 9.1.1,很高興在需要時提供任何其他信息。


編輯:

這是B頁的控制器操作,除了讀取項目的某些字段外,它不會做很多事情。在完成API調用之前,不會調用此操作。

public ActionResult Dashboard()
{
    Item datasource = RenderingContext.Current.Rendering.Item;
    var viewModel = _clientOverviewService.GetPageBViewModel(datasource);
    return View(viewModel);
}

API調用基本上可以歸結為:

switch (httpType)
{
    case HttpType.Post:
        return await httpClient.PostAsync(uri.ToString(), new StringContent(jsonData, Encoding.UTF8, "application/json"));

    case HttpType.Get:
        return await httpClient.GetAsync(uri.ToString());

    ... 
}

這是進行API調用的JS代碼。在上面的代碼塊中,將BigApiCallURL轉換為uri變量:

const axiosInstance = await axiosInstanceGenerator('BigApiCallURL');
const response = await axiosInstance.post('', requestPayload);

更新:

可以在Sitecore本身中找到類似的行為。當您打開內容編輯器並在"體驗編輯器"中打開一個項目時,通常需要幾秒鐘的時間來加載"體驗編輯器"。加載時,在"內容編輯器"中單擊其他項目以查看它,您會注意到該過程實際上已被阻止。體驗編輯器加載完成後,它將恢復。

也許這兩個問題相互關聯?

0

It looks like a problem with session state behavior. I have faced similar issue in Sitecore 8, when API calls from frontend came to queue and block one another. It was fixed by adding [SessionStateBehavior.ReadOnly] attribute on controller that I used for fetching data (to prevent blocking upcoming requests while actions are executed). Try to do the same for your controller.

[SessionState(SessionStateBehavior.ReadOnly)]
public class FetchDataController
{
 ...
}