首页 > 解决方案 > 用于 dotnet core webapi 和 angular ui 的 GCP App Engine dispatch.yaml

问题描述

我有 URL 为“https://myprojectid.uc.r.appspot.com”的默认服务,然后我使用名为“mywebapi-poc”的服务部署了 .net core webapi,并可使用“https://mywebapi- poc-dot-myprojectid.uc.r.appspot.com"

现在我想使用类似这样的 dispatch.yaml 创建路由。"https://myprojectid.uc.r.appspot.com/mywebapi-poc" 和 "https://myprojectid.uc.r.appspot.com/mywebui-poc" 可以将所有 web api 请求路由到 mywebapi-poc服务和对 mywebui-poc 服务的所有 web ui 请求

我怎样才能使它工作?

dispatch:
  - url: "myprojectid.uc.r.appspot.com/"
    service: default

  - url: "myprojectid.uc.r.appspot.com/mywebapi-poc/*"
    service: mywebapi-poc
  
  - url: "myprojectid.uc.r.appspot.com/mywebui-poc/*"
    service: mywebui-poc

这样做之后,当我这样称呼它时https://myprojectid.uc.r.appspot.com/mywebapi-poc/api/v1/WeatherForecast

我得到 404

Angular Web UI 也是如此。第一个 index.html 页面加载,但之后没有加载后续的 Angular 应用程序文件。例如https://myprojectid.uc.r.appspot.com/mywebui-poc/用 200 响应加载 index.html 但https://myprojectid.uc.r.appspot.com/mywebui-poc/main.js没有'不加载,我得到 404。请注意,我之前用“/”遇到了路径问题,所以我在 index.html 中用“/mywebui-poc/”替换了它

使用“/”,我可以使单个 UI 服务与https://mywebui-poc-dot-myprojectid.uc.r.appspot.com一起使用

标签: google-app-enginegcloud

解决方案


App引擎按照dispatch.yaml中提到的顺序优先级编写调度规则。他们在文档中声明

调度规则依赖于顺序,并且只会应用与 URL 匹配的第一个规则。

在您的情况下, dispatch.yaml 中的第一个路由规则指向“默认”服务,并且域的特定部分 ( myprojectid.uc.r.appspot.com/) 在所有路由中都是通用的。因此,您尝试使用此域访问的任何 URL 都将路由到默认服务。而是如下编写您的 dispatch.yaml ,它应该可以工作

dispatch:
  - url: "myprojectid.uc.r.appspot.com/mywebapi-poc/*"
    service: mywebapi-poc
  
  - url: "myprojectid.uc.r.appspot.com/mywebui-poc/*"
    service: mywebui-poc

dispatch.yaml 路由中省略的任何内容都会自动路由到默认服务


推荐阅读