最近在花時間封裝一個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