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

相关文章
相关标签/搜索