C# 如何使用WebBrowser控件捕获JSON响应

C# 如何使用WebBrowser控件捕获JSON响应,c#,json,webbrowser-control,C#,Json,Webbrowser Control,我使用WebBrowser.Navigate()发布到网站的JSON响应URL 一切进展顺利,包括调用webBrowser1\u DocumentCompleted()事件处理程序 但是,我没有得到可以通过编程处理的“安静”响应(例如,webBrowser1.Document),而是收到一个文件下载对话框: 如果我单击Save按钮并稍后检查该文件,它将完全包含我期望的JSON响应 但是我希望程序在代码中捕获这个JSON响应,而不显示该对话框,也不必单击Save按钮 如何使用WebBrowser

我使用
WebBrowser.Navigate()
发布到网站的JSON响应URL

一切进展顺利,包括调用
webBrowser1\u DocumentCompleted()
事件处理程序

但是,我没有得到可以通过编程处理的“安静”响应(例如,
webBrowser1.Document
),而是收到一个文件下载对话框:

如果我单击
Save
按钮并稍后检查该文件,它将完全包含我期望的JSON响应

但是我希望程序在代码中捕获这个JSON响应,而不显示该对话框,也不必单击
Save
按钮

如何使用WebBrowser控件捕获JSON响应

注意:在发布这个问题之前,我搜索了这么多,我发现了一个类似的问题,被接受的答案并没有真正解释如何做(我已经在处理)。有什么建议吗


更新:到目前为止,我所有的搜索都没有关于使用WebBrowser控件获取JSON响应的结果。也许我完全错了?我缺少什么?

不要使用
WebBrowser
进行JSON通信。改用:


您可以在此和中找到更多详细信息。

我与Scatmoi有相同的问题,但由于登录要求,我无法使用web请求。我试图修改上面的答案,看看是否可以通过登录验证,但没有成功

-更新-

我刚刚找到了适合我的解决方案。更多信息请参见下面的链接,以防我将答案粘贴到这里

需要在IE中查看JSON响应吗? 1.打开记事本并粘贴以下内容:

Windows Registry Editor Version 5.00;
; Tell IE 7,8,9,10 to open JSON documents in the browser on Windows XP and later.
; 25336920-03F9-11cf-8FD0-00AA00686F13 is the CLSID for the "Browse in place" .
;
[HKEY_CLASSES_ROOT\MIME\Database\Content Type\application/json]
"CLSID"="{25336920-03F9-11cf-8FD0-00AA00686F13}"
"Encoding"=hex:08,00,00,00
2.将文档另存为IE-Json.reg,然后运行它


注意:这已在Windows XP和Windows 7上使用IE 7、8、9、10进行了测试。

上述解决方案缺少两件事,下面的代码应适用于所有情况:

Windows Registry Editor Version 5.00
;
; Tell IE to open JSON documents in the browser.  
; 25336920-03F9-11cf-8FD0-00AA00686F13 is the CLSID for the "Browse in place" .
;  

[HKEY_CLASSES_ROOT\MIME\Database\Content Type\application/json]
"CLSID"="{25336920-03F9-11cf-8FD0-00AA00686F13}"
"Encoding"=hex:08,00,00,00

[HKEY_CLASSES_ROOT\MIME\Database\Content Type\application/x-json]
"CLSID"="{25336920-03F9-11cf-8FD0-00AA00686F13}"
"Encoding"=hex:08,00,00,00

[HKEY_CLASSES_ROOT\MIME\Database\Content Type\text/json]
"CLSID"="{25336920-03F9-11cf-8FD0-00AA00686F13}"
"Encoding"=hex:08,00,00,00

只需将其保存为json.reg文件,然后运行以修改注册表。

作为gadildafissh和Tomasz Maj的awnser的扩展,这可以通过编程实现。 只有一个缺点,这必须使用管理员权限来完成。 我的示例是64位设备上的32位应用程序

   private bool SetRegistery()
    {
        try
        {
            using (var hklm = RegistryKey.OpenBaseKey(RegistryHive.ClassesRoot, RegistryView.Registry64))
            {
                using (RegistryKey key = hklm.OpenSubKey(@"MIME\Database\Content Type\application/json", true))
                {
                    if (key != null)
                    {
                        key.SetValue("CLSID", "{25336920-03F9-11cf-8FD0-00AA00686F13}");
                        key.SetValue("Encoding", new byte[] { 0x80, 0x00, 0x00, 0x00 });
                    }
                }
            }
            return true;
        }
        catch (Exception ex)
        {
            MessageBox.Show(ex.Message);
        }
        return false;
    }

恐怕这不是正确的方法。您需要使用。如果问题是“如何使用WebBrowser控件“X”,则解决方案不能不使用WebBrowser控件。非常感谢您的回答!我也有同样的问题,我几乎从来没有遇到过这样的情况:我可以直接剪切和粘贴答案,而不做任何修改来修复答案中的小错误。这是第一次成功。
   private bool SetRegistery()
    {
        try
        {
            using (var hklm = RegistryKey.OpenBaseKey(RegistryHive.ClassesRoot, RegistryView.Registry64))
            {
                using (RegistryKey key = hklm.OpenSubKey(@"MIME\Database\Content Type\application/json", true))
                {
                    if (key != null)
                    {
                        key.SetValue("CLSID", "{25336920-03F9-11cf-8FD0-00AA00686F13}");
                        key.SetValue("Encoding", new byte[] { 0x80, 0x00, 0x00, 0x00 });
                    }
                }
            }
            return true;
        }
        catch (Exception ex)
        {
            MessageBox.Show(ex.Message);
        }
        return false;
    }