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";
            }

            else

           {  //TODO:處理正常返回

           } 

}

 

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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM