如何将数据发布到另一个Web应用程序(跨域)

请考虑以下场景,

App1和App2有两个Web应用程序。 用户可以通过表单在App1上提交他的信息。 单击App1上的特定按钮/链接时,应将相同的数据发布到App2上的页面,并且还应将用户重定向到App2上的同一页面。

我想帮助找到实现此function的最佳方法。

我已经尝试过的方法之一是在运行时创建一个临时HTML表单,将表单的action属性设置为App2 Page并使用javascript submit获取表单。 然后可以使用response.form对象在App2页面上获取数据。

这种方法运行良好,但我仍然想知道是否有任何其他方法来实现所需的function。

如果你可以提供一些使用RESTful webservices来实现这一点的见解,或者使用一些HttpModule来拦截App1上的请求并修改对app2的重定向响应或者你可能认为适合的任何其他方法,我真的很高兴。

编辑:使用查询字符串不是我的选项。

我需要使用Feed agregation进行类似的操作,并从不同域上的网页内容构建rss feed。

用户获取app1页面,填写详细信息并在服务器上提交app1我有一个看起来像这样的方法…

HTMLDocument FetchURL( string url ) { WebClient wc = new WebClient(); string remoteContent = wc.DownloadString(url); // mshtml api is very weird but lets just say you have to do things this way ... HtmlDocument doc = new HTMLDocument(); IHTMLDocument2 doc2 = (IHTMLDocument2)doc; doc2.write(new object[] { remoteContent }); return (HTMLDocument)doc2; } 

这个function做2件事……

  1. 它在“url”获取内容页面
  2. 它将该内容解析为HTMLDocument对象

一旦你有了这个function,你就可以调用它将url传递给远程页面并获得一个html doucment。 HTMLDocument对象中的函数将允许您执行类似dom查询的javascript,例如:

 docObject.GetElementById("id"); 

然后我有不同的function,根据我从中返回数据的页面/网站,使用此对象执行不同的操作。

然而,这里有一个致命的缺陷……

对于结构没有太大变化并且由代码构建但在动态性较低的站点上不太好的站点,这可能非常有效。

以stackoverflow为例,它很容易提出问题和该问题的接受答案,因此我可以使用此代码在我自己的网站上从这里提取和发布内容。

然而……

这不会帮助您获取用户/登录相关的详细信息,因为这类信息不会分发给大家。

这有点像我去尝试将Facebook个人资料链接到我自己的网站,我将不得不通过某种forms的api,要求用户在提出请求之前validation他们的详细信息。

只是基于url拉网页只会给其他网站没有身份validation信息,除非该网站接受了问题字符串中的用户登录详细信息并且您已经拥有它们。

但是,您可以通过撕开我的示例方法来链接请求,请求解析结果的登录页面,填写表单,然后使用相同的Web客户端实例回发以登录然后请求URL。

我们的想法是,您将有一个表单要求用户输入您网站上远程站点的登录详细信息,然后您可以根据它找到他们的个人资料页面。

这最好是一个类,而不仅仅是像我这里一样简单的方法。

在我的情况下,虽然我只是在简单的事情(英国广播公司前40英国图表),我不仅从英国广播公司,但亚马逊,谷歌和youtube等地方提取信息,然后我建立了一个页面:)

它很整洁但除了将所有其他最喜欢的信息来源拉到1页之外没有任何function目的。

如果您已经承诺使用javascript,那么为什么不使用ajaxpost,并根据响应更改window.location?

您可以使用HttpServerUtility.Transfer这将保留您的表单内容并将用户转移到新页面。

http://msdn.microsoft.com/en-us/library/system.web.httpserverutility.transfer.aspx

我已经构建了类似你所描述的东西,我发现使用

标签POST到app2是最可靠的方式……基本上,你发现它运行良好的方式。

如果App2驻留在不同的域上,通常最好为提交创建自己的界面,并让该界面处理从App1到App2的过帐。

 (Browser) -> Submits form to App1 -> (App1) -> validate input -> stores local info -> creates an HttpRequest/POST object -> posts to App2 (App2) -> handles the post <- returns the response -> confirms the results of App2 <- returns the results to the browser. 

在本质上,您希望尽可能地控制和应用来自Applications域的请求到任何外部接口。

注意:我正在回答我自己的问题,只是为了得到一个正确的答案。 各位成员提供的所有建议都以自己的方式正确,但不符合我的要求。 因此,我不能接受他们中的任何一个是正确的。

我实现的方法是创建一个自定义控件,该控件具有一个可配置属性,其中包含用于发布数据的URL,另一个用于接受字典对象作为要发布的数据输入。

此控件将在内部创建一个HTML表单,其action属性设置为用户指定的URL,并且具有从字典对象创建的数据字段。 然后,此表单将发布在托管此控件的页面上的按钮单击事件上。