从角度4的webapi读取url中的标头参数

时间:2019-03-07 09:14:57

标签: angular asp.net-web-api

我有一个网站http://header.com,该网站调用AP​​I来保存一些数据并返回带有 header参数的网站http://post.header.com的URL。 http://post.header.com中的应用程序应从API返回的网址中读取标头。 使用Cookie和本地存储进行了尝试,但没有一个起作用(空) 我想从URL隐藏参数。 请建议我

1 个答案:

答案 0 :(得分:1)

如果我对问题的理解正确,则您正在尝试实现以下方案:

  1. 用户在网络浏览器中打开http://header.com(Web1),并将一些数据发布到您的API。
  2. API返回一个URL作为响应和一些参数。
  3. Web1上的Web应用程序获取URL并将浏览器重定向到http://post.header.com(Web2)(或在新的标签/窗口中打开它)。
  4. Web2应该使用API​​返回的结果中的参数,并对其进行处理。
  5. 您永远都不想在浏览器的地址栏中输入这些参数。

如果我的理解是错误的,请忽略此答案的其余部分。在这种情况下,请编辑您的问题并详细描述该情况。

以下是尝试解决此问题时必须考虑的事实:

  1. 由于您使用的是不同的域,因此LocalStorage将不会在它们之间共享(如您所知),因此不能用于发送参数。参见此处:In HTML5, is the localStorage object isolated per page/domain?
  2. 您无法发送带有在Web浏览器中打开的URL的HTTP标头。那根本不是浏览器如何工作。
  3. 最初,Cookie并非旨在在不同的域之间共享,但这有所改变。您应该可以在Cookie中设置域header.com,子域(例如post.header.com)应该可以使用它。有关详情,请参见此处:Share cookie between subdomain and domain

可能的解决方案/解决方法:

  1. 您可以通过设置域来尝试cookie选项(请参见上面的第3点)。
  2. 如果可以在新的选项卡/窗口中打开Web2(而不是重定向当前窗口),则Web1可以使用window.postMessage将消息(和参数)发送到Web2。 Web2可以使用侦听器对该消息做出反应。此处的示例代码:How can I send an event from parent window to its child window?
  3. 您可以在Web API中使用缓存(例如MemoryCache)并存储键值对,即带有参数的Guid plus对象。然后,您将把密钥返回给客户端,然后客户端将重定向到http://post.header.com?key=<Key>。 Web2可以使用密钥并从API中获取参数。使用此方法,您仍然有一个URL参数,但实际参数不属于URL。