chromium – 在初始页面加载c#上发送自定义标题信息

或者如何在新建ChromiumWebBrowser实例时将自定义标头注入到站点的初始请求中。

我是Chromium的菜鸟,可以真正使用一些帮助。 我有一个带CEF窗口的winforms应用程序。 K,到目前为止没有问题。 我需要做的是使用包含身份validation信息的自定义http-header调用/加载初始URL。 这可能吗?

以下基本上是正在发挥作用的所有部分工作,除了自定义标题(Doh!)

Winform(CEF httpRequest(带有自定义标头))[永远不会超过这一点] => C#MVC web app => Owin_Authentication_Pipeline segment => MVC响应带有填充的Razor视图=>显示在Winform Chromium应用程序中。

也许这也会有所帮助:

using CefSharp; using CefSharp.WinForms; ... private void Form1_Load(object sender, EventArgs e) { Cef.Initialize(); ChromiumWebBrowser myBrowser = new ChromiumWebBrowser("whatever.com"); // ??How do i get a custom header be sent with the above line?? myBrowser.Dock = DockStyle.Fill; //myBrowser.ShowDevTools(); //myBrowser.RequestHandler = new DSRequestHander(); //myBrowser.FrameLoadStart += myBrowser_FrameLoadStart; this.Controls.Add(myBrowser); } 

我把它弄死了,看了看,尝试了我工具箱中的所有技巧,然后是一些。

我非常感谢任何想法,帮助或暗示我如何能够解决或绕过这个boggler。 提前致谢。

实现并分配IRequestHandler 。 你之后的方法应该是OnBeforeResourceLoad ,一个基本的例子应该是这样的

 bool IRequestHandler.OnBeforeResourceLoad(IWebBrowser browser, IRequest request, IResponse response) { var headers = request.Headers; headers["Custom-Header"] = "My Custom Header"; request.Headers = headers; return false; } 

目前,您必须阅读headers属性,进行更改然后重新分配。

您应该创建一个实现IRequestHandler的类,然后在浏览器对象中将该类的实例设置为RequestHandler

对于版本53,该类应如下所示:

 class ChromeBrowserRequestHandler: IRequestHandler { public bool GetAuthCredentials(IWebBrowser browserControl, IBrowser browser, IFrame frame, bool isProxy, string host, int port, string realm, string scheme, IAuthCallback callback) { return false; } public bool OnBeforeBrowse(IWebBrowser browserControl, IBrowser browser, IFrame frame, IRequest request, bool isRedirect) { return false; } public bool OnBeforePluginLoad(IWebBrowser browser, string url, string policyUrl, WebPluginInfo info) { return false; } public CefReturnValue OnBeforeResourceLoad(IWebBrowser browserControl, IBrowser browser, IFrame frame, IRequest request, IRequestCallback callback) { var headers = request.Headers; headers["Custom-Header"] = "My Custom Header"; request.Headers = headers; return CefReturnValue.Continue; } public bool OnCertificateError(IWebBrowser browser, CefErrorCode errorCode, string requestUrl) { return false; } public void OnPluginCrashed(IWebBrowser browser, string pluginPath) { } public void OnRenderProcessTerminated(IWebBrowser browserControl, IBrowser browser, CefTerminationStatus status) { } public IResponseFilter GetResourceResponseFilter(IWebBrowser browserControl, IBrowser browser, IFrame frame, IRequest request, IResponse response) { return null; } public bool OnCertificateError(IWebBrowser browserControl, IBrowser browser, CefErrorCode errorCode, string requestUrl, ISslInfo sslInfo, IRequestCallback callback) { return false; } public bool OnOpenUrlFromTab(IWebBrowser browserControl, IBrowser browser, IFrame frame, string targetUrl, WindowOpenDisposition targetDisposition, bool userGesture) { return false; } public void OnPluginCrashed(IWebBrowser browserControl, IBrowser browser, string pluginPath) { } public bool OnProtocolExecution(IWebBrowser browserControl, IBrowser browser, string url) { return false; } public bool OnQuotaRequest(IWebBrowser browserControl, IBrowser browser, string originUrl, long newSize, IRequestCallback callback) { return false; } public void OnRenderViewReady(IWebBrowser browserControl, IBrowser browser) { } public void OnResourceLoadComplete(IWebBrowser browserControl, IBrowser browser, IFrame frame, IRequest request, IResponse response, UrlRequestStatus status, long receivedContentLength) { } public void OnResourceRedirect(IWebBrowser browserControl, IBrowser browser, IFrame frame, IRequest request, ref string newUrl) { } public bool OnResourceResponse(IWebBrowser browserControl, IBrowser browser, IFrame frame, IRequest request, IResponse response) { return false; } } 

然后,在创建浏览器对象时:

 ChromiumWebBrowser myBrowser = new ChromiumWebBrowser("whatever.com") { RequestHandler = new ChromeBrowserRequestHandler() }; 

请注意,必须在加载页面之前设置请求处理程序。 如果您无法在instanctiaction期间设置请求处理程序,您仍可以稍后设置它使用myBrowser.Load("whatever.com")重新加载页面。