C# 在IRequestHandler中是否有OnBeforeResourceLoad的替换?

C# 在IRequestHandler中是否有OnBeforeResourceLoad的替换?,c#,cefsharp,chromium-embedded,cefsharp.offscreen,C#,Cefsharp,Chromium Embedded,Cefsharp.offscreen,我正在尝试使用CefSharp动态更改用户代理。我已经查看了IRequestHandler类,不再看到名为OnBeforeResourceLoad的方法 但是,我确实找到了一个名为OnBeforeBrowse的方法。然而,所有的请求头都是空的,当我尝试添加一个请求头时,它根本不会添加。我尝试过引用、更改值并重新分配,但没有骰子 CefSharp:75.1.142 .NET:4.7.2 屏幕外 我在IRequestHandler中找到了一个名为OnBeforeBrowse的方法。但是,所有的请求头

我正在尝试使用CefSharp动态更改用户代理。我已经查看了IRequestHandler类,不再看到名为OnBeforeResourceLoad的方法

但是,我确实找到了一个名为OnBeforeBrowse的方法。然而,所有的请求头都是空的,当我尝试添加一个请求头时,它根本不会添加。我尝试过引用、更改值并重新分配,但没有骰子

CefSharp:75.1.142 .NET:4.7.2 屏幕外 我在IRequestHandler中找到了一个名为OnBeforeBrowse的方法。但是,所有的请求头都是空的,当我尝试通过IRequest参数添加一个请求头时,它根本不会添加。我尝试过引用、更改值并重新分配,但没有骰子。总是空着回来,没有钥匙

受保护的覆盖bool on BeforeBrowseWebBrowser chromiumWebBrowser、IBrowser浏览器、IFrame框架、IRequest请求、bool用户手势、bool isRedirect { var headers=request.headers; headers[用户代理]=新用户代理; request.Headers=Headers; 返回false; } 我希望用户代理更改为我给定的值。

从75版开始,CEF现在支持Chromium网络服务,这带来了大量破坏性的API更改

依照

与资源相关的回调已从IRequestHandler移动到新的IResourceRequestHandler接口,该接口通过IRequestHandler.GetResourceRequestHandler方法返回

“新建”仅可用于覆盖所需的方法 “新建”仅可用于覆盖所需的方法 从版本75开始,CEF现在支持Chromium网络服务,这带来了大量破坏性的API更改

依照

与资源相关的回调已从IRequestHandler移动到新的IResourceRequestHandler接口,该接口通过IRequestHandler.GetResourceRequestHandler方法返回

“新建”仅可用于覆盖所需的方法 “新建”仅可用于覆盖所需的方法
我在这方面花了很多时间,但是我找不到任何关于CefSharp库这些新变化的例子,所以我把一些有用的东西放在一起。我用在网上找到的零碎东西把它们放在一起。它可能并不完美,但我在任何地方都找不到一个直截了当的答案

定义实现ResourceRequestHandler的类。基类具有必需的OnBeforeResourceLoad函数。我在构造函数中添加了一个userAgent字符串,看看它是否可以通过调用functions传递

    public class ResourceRequestHandlerExt : ResourceRequestHandler
    {
        private string userAgent;

        public ResourceRequestHandlerExt(string userAgent)
        {
            this.userAgent = userAgent;
        }

        protected override CefReturnValue OnBeforeResourceLoad(IWebBrowser chromiumWebBrowser, IBrowser browser, IFrame frame, IRequest request, IRequestCallback callback)
        {
            var headers = request.Headers;
            headers["User-Agent"] = userAgent;
            request.Headers = headers;

            return base.OnBeforeResourceLoad(chromiumWebBrowser, browser, frame, request, callback);
        }
    }
定义实现RequestHandler的类。基类有一个必需的GetResourceRequestHandler函数,该函数允许用户将我们的用户代理传递给ResourceRequestHandlerExt类

    public class RequestHandlerExt : RequestHandler
    {
        private string userAgent;

        public RequestHandlerExt(string userAgent)
        {
            this.userAgent = userAgent;
        }

        protected override IResourceRequestHandler GetResourceRequestHandler(IWebBrowser chromiumWebBrowser, IBrowser browser, IFrame frame, IRequest request, bool isNavigation, bool isDownload, string requestInitiator, ref bool disableDefaultHandling)
        {
            if (!string.IsNullOrEmpty(userAgent)) return new ResourceRequestHandlerExt(userAgent);
            else return base.GetResourceRequestHandler(chromiumWebBrowser, browser, frame, request, isNavigation, isDownload, requestInitiator, ref disableDefaultHandling);
        }
    }
实例化ChromiumWebBrowser对象时,可以使用以下命令将RequestHandler设置为上面的RequestHandlerExt类:

ChromiumWebBrowser browser = new ChromiumWebBrowser();
browser.RequestHandler = new RequestHandlerExt(userAgent);
在CefSettings中指定用户代理将被覆盖,因此在这种情况下不需要。 如果未指定用户代理,则不会添加/修改任何标题 可以为每个browser.Loadurl调用更改用户代理。
我在这方面花了很多时间,但是我找不到任何关于CefSharp库这些新变化的例子,所以我把一些有用的东西放在一起。我用在网上找到的零碎东西把它们放在一起。它可能并不完美,但我在任何地方都找不到一个直截了当的答案

定义实现ResourceRequestHandler的类。基类具有必需的OnBeforeResourceLoad函数。我在构造函数中添加了一个userAgent字符串,看看它是否可以通过调用functions传递

    public class ResourceRequestHandlerExt : ResourceRequestHandler
    {
        private string userAgent;

        public ResourceRequestHandlerExt(string userAgent)
        {
            this.userAgent = userAgent;
        }

        protected override CefReturnValue OnBeforeResourceLoad(IWebBrowser chromiumWebBrowser, IBrowser browser, IFrame frame, IRequest request, IRequestCallback callback)
        {
            var headers = request.Headers;
            headers["User-Agent"] = userAgent;
            request.Headers = headers;

            return base.OnBeforeResourceLoad(chromiumWebBrowser, browser, frame, request, callback);
        }
    }
定义实现RequestHandler的类。基类有一个必需的GetResourceRequestHandler函数,该函数允许用户将我们的用户代理传递给ResourceRequestHandlerExt类

    public class RequestHandlerExt : RequestHandler
    {
        private string userAgent;

        public RequestHandlerExt(string userAgent)
        {
            this.userAgent = userAgent;
        }

        protected override IResourceRequestHandler GetResourceRequestHandler(IWebBrowser chromiumWebBrowser, IBrowser browser, IFrame frame, IRequest request, bool isNavigation, bool isDownload, string requestInitiator, ref bool disableDefaultHandling)
        {
            if (!string.IsNullOrEmpty(userAgent)) return new ResourceRequestHandlerExt(userAgent);
            else return base.GetResourceRequestHandler(chromiumWebBrowser, browser, frame, request, isNavigation, isDownload, requestInitiator, ref disableDefaultHandling);
        }
    }
实例化ChromiumWebBrowser对象时,可以使用以下命令将RequestHandler设置为上面的RequestHandlerExt类:

ChromiumWebBrowser browser = new ChromiumWebBrowser();
browser.RequestHandler = new RequestHandlerExt(userAgent);
在CefSettings中指定用户代理将被覆盖,因此在这种情况下不需要。 如果未指定用户代理,则不会添加/修改任何标题 可以为每个browser.Loadurl调用更改用户代理。
根据发行说明,您需要查看更改列表感谢您的链接。我已经搜索了变更日志和谷歌,但没有找到任何点击率。如何将ResourceRequestHandler附加到ChromiumWebBrowser?项目源代码中的示例已在中更新,您需要一个参考。我正在键入回复,直到现在才看到这一点。我明天去看看。这是漫长的一天,我需要长时间休息。感谢您提供新的项目文件,请参阅发行说明以获取更改列表感谢您提供链接。我已经搜索了变更日志和谷歌,但没有找到任何点击率。如何将ResourceRequestHandler附加到ChromiumWebBrowser?我举的例子
n项目来源已在中更新,您需要一个参考。我正在键入一个答复,直到现在才看到这一点。我明天去看看。这是漫长的一天,我需要长时间休息。感谢您提供新的项目文件源代码中有一些示例,深入了解我尝试使用的每个库的源代码对用户来说不是很友好。我只是看了一下我通过谷歌找到的文档,但它们引用了旧的例子和旧的做事方式,否则,它们会很棒。也许我没有那么能干什么的,但我只是想要一个工作的例子。我现在已经提供了一个,已经完成了。这是一个开源项目,在我看来,这是你应该首先查看的地方之一。你能提供ResourceRequestHandler和RequestHandler的类详细信息吗,我无法正确地实现这一点。源代码中有一些示例,深入了解我尝试使用的每个库的源代码对用户不是很友好。我只是看了一下我通过谷歌找到的文档,但它们引用了旧的例子和旧的做事方式,否则,它们会很棒。也许我没有那么能干什么的,但我只是想要一个工作的例子。我现在已经提供了一个,已经完成了。这是一个开源项目,在我看来,这是您应该首先查看的地方之一。如果您能提供ResourceRequestHandler和RequestHandler的类详细信息,我无法正确实现这一点。请参阅以获取示例。请参阅以获取示例。