C# 使用system.windows.forms.browser将cookie发送到web应用程序

C# 使用system.windows.forms.browser将cookie发送到web应用程序,c#,winforms,webbrowser-control,C#,Winforms,Webbrowser Control,我有windows窗体应用程序。 我必须通过浏览器控件创建新cookie并将其发送到web应用程序(通过其浏览器控件从windows窗体应用程序创建并发送新cookie) 此winforms应用程序仅显示一个正在等待cookie中信息的web应用程序。然后,这个web应用程序应该根据这个cookie的值做一些决定 我发现: 但我希望避免使用: [DllImport("wininet.dll", CharSet = CharSet.Auto, SetLastError = true)] 有什么

我有windows窗体应用程序。 我必须通过浏览器控件创建新cookie并将其发送到web应用程序(通过其浏览器控件从windows窗体应用程序创建并发送新cookie)

此winforms应用程序仅显示一个正在等待cookie中信息的web应用程序。然后,这个web应用程序应该根据这个cookie的值做一些决定

我发现:

但我希望避免使用:

[DllImport("wininet.dll", CharSet = CharSet.Auto, SetLastError = true)]

有什么想法吗?

我没有对这个解决方案进行广泛的测试,但它应该可以工作。我尝试了一个静态页面,cookie被正确添加

我所做的基本上是向文档中注入一个添加cookie的Javascript函数,然后立即调用它

        public Form1()
        {
            InitializeComponent();
            this.Load += Form1_Load;
        }

        void Form1_Load(object sender, EventArgs e)
        {
            webBrowserControl.Navigate("file:///C:/Temp/span.html");
            webBrowserControl.Navigated += webBrowserControl_Navigated;
        }

        void webBrowserControl_Navigated(object sender, WebBrowserNavigatedEventArgs e)
        {
            InjectCookieSetterScript();
        }

        private void InjectCookieSetterScript()
        {
            String script =
@"function setCookie()
{
    document.cookie = ""myCookie=value;path=/"";
}";
            InjectScript(script);
            webBrowserControl.Document.InvokeScript("setCookie");
        }

        public void InjectScript(String scriptText)
        {    
            var headElements = webBrowserControl.Document.GetElementsByTagName("head");
            if (headElements.Count == 0)
            {
                throw new IndexOutOfRangeException("No element with tag 'head' has been found in the document");
            }
            var headElement = headElements[0];

            var script = webBrowserControl.Document.CreateElement("script");
            script.InnerHtml = scriptText; // "<script>" + scriptText + "</script>";
            headElement.AppendChild(script);
        }
    }
public Form1()
{
初始化组件();
此.Load+=表格1\U Load;
}
void Form1\u加载(对象发送方,事件参数e)
{
webBrowserControl.Navigate(“file:///C:/Temp/span.html");
webBrowserControl.Navigated+=webBrowserControl\u Navigated;
}
无效webBrowserControl_已导航(对象发送器,WebBrowserNavigatedEventArgs e)
{
InjectCookieSetterScript();
}
私有void InjectCookieSetterScript()
{
字符串脚本=
@“函数setCookie()
{
document.cookie=”“mycokie=value;path=/”;
}";
脚本(脚本);
webBrowserControl.Document.InvokeScript(“setCookie”);
}
公共脚本(字符串脚本文本)
{    
var headElements=webBrowserControl.Document.GetElementsByTagName(“head”);
如果(headElements.Count==0)
{
抛出新的IndexOutOfRangeException(“在文档中未找到带有标记‘head’的元素”);
}
var headElement=headElements[0];
var script=webBrowserControl.Document.CreateElement(“脚本”);
script.InnerHtml=scriptText;/“”+scriptText+“”;
headElement.AppendChild(脚本);
}
}

谢谢!它按我想要的方式工作。这是一个优雅的黑客-我喜欢它。