【问题标题】:Forcing same domain links to be handled outside of angular's router强制在 Angular 的路由器之外处理相同的域链接
【发布时间】:2018-12-27 01:10:37
【问题描述】:

我们有一个 Angular 应用程序托管在域的根目录,比如: example.com

我们在 /api 虚拟目录中运行了一个 mvc.net api: example.com/api

我们在 api 的 web.config 中重写了规则以允许调用 /api,这可以正常工作,因为我们的 xhr 调用正在工作。

对于身份验证,我们必须将浏览器路由到 example.com/api/auth/whatever,以便它可以适当地 302 到身份验证提供程序。一旦用户进行身份验证,他们就会被路由回我们的 API,然后返回到 Angular 应用程序。

这一切在开发中都没有问题,因为从技术上讲,一切都在不同的域中(locahost:4200、4201 等)。一旦它部署在同一个域上,角度路由器就会开始拦截 auth 链接点击,一旦没有匹配的路由,就会路由到 catch all 路由。

我已经尝试将 target="_self" 添加到链接中,正如我看到其他人推荐的那样,但这并没有改变行为。

有没有办法强制 angular 不处理路由,或者提供一些会拦截路由的保护,让浏览器处理它?

【问题讨论】:

  • 对于FE服务器,你用的是express js吗?
  • 不,我们使用他们的 PaaS 产品托管在 Azure 上

标签: angular asp.net-web-api angular-router


【解决方案1】:

我在 chrome 开发工具的帮助下解决了这个问题,this stackoverflow post

我们正在使用 angular pwa 包,并且我查看了该网络日志,显示服务工作者正在从缓存中提供 URL(在这种情况下,不正确)。我们在 ngsw.json 中添加了以下条目:

  "dataGroups":[
    {
      "name": "api",
      "urls": ["/api"],
      "cacheConfig": {
        "maxSize": 0,
        "maxAge": "0u",
        "strategy": "freshness"
      }
    }
  ]

现在不再缓存所有 api 调用。我们可能会进一步将其细化为仅我们的 auth url,但目前这是可行的。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-06-19
    • 1970-01-01
    • 2019-11-28
    • 1970-01-01
    • 2018-06-18
    相关资源
    最近更新 更多