Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/274.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在Cefsharp chromiumwebbrowser中使用url发布数据参数_C#_Winforms_Cefsharp_Chromium Embedded - Fatal编程技术网

C# 在Cefsharp chromiumwebbrowser中使用url发布数据参数

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

我正在使用Cefsharp库在我的c#windows窗体应用程序中使用web界面

        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,网站显示“不允许使用方法”消息。