如何在加载时从客户端获取数据?

时间:2013-08-01 16:07:55

标签: c# xml asp.net-mvc-4 io webbrowser-control

我知道数据可以通过URL传递,例如“example.com/thing?id=1234”,或者可以通过表单和“提交”按钮传入,但这些都不是方法对我有用。

我需要获得一个相当大的xml字符串/文件。在我甚至可以显示页面之前,我需要解析它并从中获取数据。

如何在页面加载时获取此信息?客户端是否必须发送http请求?或者将xml作为字符串提交给隐藏表单?


使用背景信息进行编辑:

我正在创建一个小部件,它将出现在我的客户应用程序中,使用C#WebBrowser控件嵌入,但将托管在我的服务器上。 Web应用程序需要通过xml将一些数据(包括用于客户端验证的令牌)传递给我的小部件,这需要在我的小部件启动时首先加载。

9 个答案:

答案 0 :(得分:1)

假设您正在使用ASP.NET,因为您说它是由另一个页面生成的,只需将XML保持在Session状态。

答案 1 :(得分:1)

另一种方法,不确定它是否对您的情况有所帮助。

如果您在两个站点上共享二级域名(即..... sitename.com),那么另一种共享数据的潜在方式是您可以让他们使用令牌和xml在第二级声明一个cookie其中的数据。然后,您将获得此cookie。

我只是这样做才能共享身份验证详细信息,您需要至少共享机器密钥以支持此功能(假设.Net在这里......)。

答案 2 :(得分:1)

ASP.NET MVC 4适用于jQuery和aJax帖子。我已经多次利用这个目标完成了这个目标。

<强> jQuery的:

        $(document).ready(function() {            
            $.ajax({
                type: "POST",
                url: "/{controller}/{action}/",
                data: { clientToken: '{token}', foo: 'bar',
                success: function (data, text) {
                        //APPEND YOUR PAGE WITH YOUR PARSED XML DATA
                        //NOTE: 'data' WILL CONTAIN YOUR RETURNED RESULT
                }
            });
        });

MVC控制器:

    [HttpPost]
    public JsonResult jqGetXML(string clientToken, string foo)
    {
        JsonResult jqResult = new JsonResult();

        //GET YOUR XML DATA AND DO YOUR WORK
        jqResult.Data = //WHATEVER YOU WANT TO RETURN;

        return jqResult;
    }

注意:此示例返回Json数据(更容易使用IMO ),而不是XML。它还假设XML数据不是来自客户端,而是存储在服务器端。

编辑:这是jQuery的Ajax文档的链接, http://api.jquery.com/jQuery.ajax/

答案 3 :(得分:0)

样本解决方案:

后台进程导入xml文件并解析它。后台进程知道它是针对客户YYY并更新其信息,因此它知道xml文件已被处理。

访问者访问嵌入了窗口小部件的客户的Web应用程序。在小部件的标记中添加了客户令牌。这可以是JavaScript,Flash,iFrame等。

当窗口小部件加载时,它向您的应用程序发出请求,然后检查该文件是否已针对提供的客户(YYY)进行解析(如果有),然后显示页面/窗口小部件。

答案 4 :(得分:0)

您将无法自动将文件从客户端上传到服务器 - 至少不能通过使用html / js / httprequests的浏览器上传。浏览器根本不允许这样做。

想象一下,如果浏览器允许您在他们不知情的情况下以静默方式从客户端本地计算机上载文件,则会产生安全隐患。

答案 5 :(得分:0)

如果通过HTTP提供XML,您可以使用Liqn来解析数据。

实施例

 public partial class Sample : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)
    {
        string url = "http://news.yahoo.com/rss/";
        var el = XElement.Load(url).Elements("channel");

        StringBuilder output = new StringBuilder();

        foreach (var c in el.Elements())
        {
            switch (c.Name.LocalName.ToLower())
            {
                case "title": 
                    output.Append(c.Value);
                    output.Append("<br />");
                    break;
            }
        }

        this.Label1.Text = output.ToString();

    }
}

答案 6 :(得分:0)

目前还不完全清楚应用程序是什么以及您拥有什么样的选项,以及您对Web服务器的控制程度。

如果您是网络服务器/应用程序的所有者,您的选择范围更广。您可以先使用HTTP POST或PUT将文件发送到Web服务器,包括随机令牌,然后在查询字符串中使用相同的令牌进行GET和令牌

或使用适用于第三方拥有的网站的其他选项

如果您尝试使用某些身份验证API,请了解有关它的更多信息。由于您正在托管Web浏览器控件,因此您有很多选项来编写脚本。包括加载任何形式,使用xml设置textarea或隐藏字段文本,然后模拟提交按钮单击。然后,您可以回复任何重定向和HTML响应。

你也可以在页面中注入javascript,然后用ajax请求将它发送到服务器。

选择在很大程度上取决于交互模型。

如果您需要更好的建议,那么从代码/ api / sdk角度提供样本/简化的url / url模式,表单内容和期望的事件序列将是最有帮助的。他们通常很友善。

答案 7 :(得分:0)

在页面之间传递数据的方法有限。就个人而言,我会在生成页面中保持会话,并在所需页面中检索它时将其清除。 如果是生成服务器端,则没有理由从客户端检索它。

http://msdn.microsoft.com/en-us/library/6c3yckfw(v=vs.100).aspx

答案 8 :(得分:0)

创建一个Web服务,您的C#应用​​程序可以将XML发布到并回复HTML。将此HTML字符串加载到WebBrowser控件中,而不是将控件指向URL。