自从Visual Studio决定将其更新为内部版本77.1.18以来,我一直在CEFSharp中度过一个杀人的时间,而Nuget搞砸了整个过程,保留了三个版本的安装,但拒绝卸载其中任何一个!为了解决这些问题,我必须手动编辑各种解决方案和项目文件,并进行安装,以便我已安装75版并且可以正常工作。
然后系统通知我DefaultRequestHandler现在已过时,我应该改用RequestHandler。很好,并且需要进行一些更改,例如将替代设置为受保护而不是公开。全部完成,除了一件事:OnResourceResponse。它坚持认为这不再存在。我已经搜索了所有可以找到的内容,并且文档中的所有引用以及Google搜索等内容都引用了比较旧的build 55。不幸的是,出于手头的特殊目的,我需要能够捕获不是200的任何响应,并在关闭错误信息之前将错误信息传递回视图。
根据我能够找到的文档,RequestHandler实现了IRequestHandler,该IRequestHandler应该包含此事件处理程序,但是Intellisense无法为我提供任何实现,并且如果我忽略Intellisense,那么显然我将无法编译...
这是我使用的原始代码,需要复制:
public override bool OnResourceResponse(IWebBrowser browserControl,IBrowser browser,IFrame frame,IRequest request,IResponse response)
{
//NOTE: You cannot modify the response,only the request
// You can now access the headers
//var headers = response.Headers;
// If it is not an OK response,set the error and close the dialog
if (response.StatusCode != (int)HttpStatusCode.OK)
{
var error = $"{response.StatusCode}: {response.StatusText}";
var chromiumWebBrowser = (ChromiumWebBrowser)browserControl;
var parent = (MyBrowserForm)chromiumWebBrowser.Parent.Parent.Parent;
parent.Errors = error;
browser.CloseBrowser(true);
return true;
}
return false;
}
请有人告诉我如何使它像更新前一样工作吗?
编辑:
要进行最终测试,因为我仍然遇到其他(不同的)nuget问题,因此答案与所接受答案中的建议相似。万一其他人需要它,这就是我要做的:
public class MyBrowserResourceRequestHandler : ResourceRequestHandler
{
protected override bool OnResourceResponse(IWebBrowser browserControl,set the error and close the dialog
if (response.StatusCode != (int)HttpStatusCode.OK)
{
var error = $"{response.StatusCode}: {response.StatusText}";
var chromiumWebBrowser = (ChromiumWebBrowser)browserControl;
var parent = (MyBrowserForm)chromiumWebBrowser.Parent.Parent.Parent;
parent.Errors = error;
browser.CloseBrowser(true);
return true;
}
return false;
}
}
然后,在原始类中,添加此重写的方法:
protected override IResourceRequestHandler GetResourceRequestHandler(IWebBrowser chromiumWebBrowser,bool isnavigation,bool isDownload,string requestInitiator,ref bool disableDefaultHandling)
{
return new MyBrowserResourceRequestHandler();
}
现在,它们都可以正确编译,并且初始测试看起来不错。如有必要,我将进行更新。