C#使用NanUI或ChromiumFx碰到的坑(一)

最近在花時間封裝一個Razor模板+NanUI的Winform組件,發現了有個神奇地方,,因爲須要使用CfxResourceHandler,用於把對cshtml文件的請求,編譯成html並返回給CEF,這時候發現了個神奇的事情,每條cshtml鏈接會請求2次,並且header是同樣的,這樣會致使每一個頁面都構建兩次,浪費資源

 

通過對比後發現第二次請求的返回的html並不會被加載到cef中,至於去了哪裏,不清楚,,對比兩次request以後,終於有了發現,,第一次有效請求和第二次無效請求的差異就在於, request的ResourceType 屬性的取值上,,有效的 request.ResourceType==CfxResourceType.MainFrame或者CfxResourceType.SubFrame, 而無效的那次請求爲SubResource,經查文檔註釋後,SubResource爲默認類型或未知類型,如此一來,就簡單處理了,,只要響應MainFrame/SubFrame並返回html後便可:

 


private void OnProcessRequest(object sender, Chromium.Event.CfxProcessRequestEventArgs e)
{
    if (RazorResourceLoader.ExistsHandler(fileName))
   {
        if (request.ResourceType==CfxResourceType.SubResource)
         {
                callback.Continue();
                e.SetReturnValue(true);
                return;
         }
   }
}
private void OnGetResponseHeaders(object sender, Chromium.Event.CfxGetResponseHeadersEventArgs e)
{
            if (_request.ResourceType== CfxResourceType.SubResource)
            {
                e.ResponseLength =0;
                e.Response.MimeType ="text/*";
                e.Response.Status = 200;    //這裏必定要返回200,不然在控制檯會出現一行404的錯誤
                e.Response.StatusText = "OK";
            }

            elsehtml

           {  //TODO:處理正常返回spa

           } orm

}

 

 上述的神奇,估計是CEF的問題,,應該也會影響到CefSharphtm

相關文章
相關標籤/搜索