C# 在Cefsharp chromiumwebbrowser中使用url发布数据参数
我正在使用Cefsharp库在我的c#windows窗体应用程序中使用web界面C# 在Cefsharp chromiumwebbrowser中使用url发布数据参数,c#,winforms,cefsharp,chromium-embedded,C#,Winforms,Cefsharp,Chromium Embedded,我正在使用Cefsharp库在我的c#windows窗体应用程序中使用web界面 Cef.EnableHighDPISupport(); CefSettings settings = new CefSettings(); Cef.Initialize(settings); chromeBrowser = new ChromiumWebBrowser("http://localhost/myp
Cef.EnableHighDPISupport();
CefSettings settings = new CefSettings();
Cef.Initialize(settings);
chromeBrowser = new ChromiumWebBrowser("http://localhost/myproject/login.php");
tab_web.Controls.Add(chromeBrowser);
但是我无法将登录凭证发布到页面(metod是post),以便我可以注册会话,用户可以直接从应用程序访问他的个人资料。
更新
httpbin回复的屏幕截图如附件所示
同时,表格数据提交应如下所示
我将内容类型更改为多部分/表单数据、文本、xml等。没有任何帮助。归功于Amaitland。他用例子给出了必要的说明,通过这些例子我得到了这个问题的答案。我在这里发布工作代码,以帮助任何其他用户
public class CustomRequestHandler : CefSharp.Handler.RequestHandler
{
protected override IResourceRequestHandler GetResourceRequestHandler(IWebBrowser chromiumWebBrowser, IBrowser browser, IFrame frame, IRequest request, bool isNavigation, bool isDownload, string requestInitiator, ref bool disableDefaultHandling)
{
//Where possible only intercept specific Url's
//Load http://httpbin.org/post in the browser and you'll
//see the post data
if (request.Url == "http://httpbin.org/post")
{
return new CustomResourceRequestHandler();
}
//Default behaviour, url will be loaded normally.
return null;
}
}
public class CustomResourceRequestHandler : CefSharp.Handler.ResourceRequestHandler
{
protected override CefReturnValue OnBeforeResourceLoad(IWebBrowser chromiumWebBrowser, IBrowser browser, IFrame frame, IRequest request, IRequestCallback callback)
{
//Modify the request to add post data
//Make sure to read https://developer.mozilla.org/en-US/docs/Web/HTTP/Methods/POST
var postData = new PostData();
postData.AddData("test=123&data=456");
request.Method = "POST";
request.PostData = postData;
//Set the Content-Type header to whatever suites your requirement
request.SetHeaderByName("Content-Type", "application/x-www-form-urlencoded", true);
//Set additional Request headers as required.
return CefReturnValue.Continue;
}
}
//Load http://httpbin.org/post in the browser to see the post data
browser = new ChromiumWebBrowser("http://httpbin.org/post");
browser.RequestHandler = new CustomRequestHandler();
有关更多详细信息,请参阅
归功于Amaitland。他用例子给出了必要的说明,通过这些例子我得到了这个问题的答案。我在这里发布工作代码,以帮助任何其他用户
public class CustomRequestHandler : CefSharp.Handler.RequestHandler
{
protected override IResourceRequestHandler GetResourceRequestHandler(IWebBrowser chromiumWebBrowser, IBrowser browser, IFrame frame, IRequest request, bool isNavigation, bool isDownload, string requestInitiator, ref bool disableDefaultHandling)
{
//Where possible only intercept specific Url's
//Load http://httpbin.org/post in the browser and you'll
//see the post data
if (request.Url == "http://httpbin.org/post")
{
return new CustomResourceRequestHandler();
}
//Default behaviour, url will be loaded normally.
return null;
}
}
public class CustomResourceRequestHandler : CefSharp.Handler.ResourceRequestHandler
{
protected override CefReturnValue OnBeforeResourceLoad(IWebBrowser chromiumWebBrowser, IBrowser browser, IFrame frame, IRequest request, IRequestCallback callback)
{
//Modify the request to add post data
//Make sure to read https://developer.mozilla.org/en-US/docs/Web/HTTP/Methods/POST
var postData = new PostData();
postData.AddData("test=123&data=456");
request.Method = "POST";
request.PostData = postData;
//Set the Content-Type header to whatever suites your requirement
request.SetHeaderByName("Content-Type", "application/x-www-form-urlencoded", true);
//Set additional Request headers as required.
return CefReturnValue.Continue;
}
}
//Load http://httpbin.org/post in the browser to see the post data
browser = new ChromiumWebBrowser("http://httpbin.org/post");
browser.RequestHandler = new CustomRequestHandler();
有关更多详细信息,请参阅
在调用LoadRequest之前,您必须执行成功的请求。感谢@amaitland,作为C#的初学者,我无法将请求示例代码集成到现有代码中。您能详细说明一下注释吗?要调用LoadRequest,您需要已经有一个有效的呈现过程,这意味着您需要首先成功加载另一个URL。或者,您可以将post数据附加到初始请求中,您可以以和为例,而不是设置头append post data。您可以创建一个新的post数据对象,该对象已更新为更详细的示例。感谢您的帮助。OnBeforeResourceLoad函数调用已成功。但是postdata未到达网站。由于未到达任何post数据,网站显示了“Method not Allowed”消息。请参阅,在调用LoadRequest之前,您必须执行成功的请求。感谢@amaitland,作为C#的初学者,我无法将请求示例代码集成到现有代码中。您能详细说明一下注释吗?要调用LoadRequest,您需要已经有一个有效的呈现过程,这意味着您需要首先成功加载另一个URL。或者,您可以将post数据附加到初始请求中,您可以以和为例,而不是设置头append post data。您可以创建一个新的post数据对象,该对象已更新为更详细的示例。感谢您的帮助。OnBeforeResourceLoad函数调用已成功。但是postdata未到达网站。由于未到达postdata,网站显示“不允许使用方法”消息。