【问题标题】:Azure static app with REST API hosted on Azure App Service带有托管在 Azure 应用服务上的 REST API 的 Azure 静态应用
【发布时间】:2021-12-17 16:23:19
【问题描述】:

我希望利用 Azure 静态应用程序来托管基于角度的 SPA 应用程序,对于这个应用程序,我有一个托管在 Azure 应用服务上的 REST API。根据我对包括 Microsoft 文档在内的所有示例的分析,我发现 Azure Function App 用于托管 API,而我的情况并非如此。

谁能帮我获取一些示例,其中包括托管在 Azure App Service 上的 API,或者可能托管在 AWS、GCP 等其他云提供商上

【问题讨论】:

  • Azure 应用服务只是在后台运行一个服务器,无论它是 nginx、kestrel 还是 iis。我认为没有任何文档,因为它就像任何机器一样。例如,在 AWS 中,他们为您提供了一个 VM 来安装您的 API - 但同样,您的 vm 和 aws 的 vm 之间没有区别。

标签: amazon-web-services azure google-cloud-platform azure-static-web-app


【解决方案1】:

您在这里有几个选项,选择一个是您需要自己做的事情。最后,无论 API 在哪里运行,它只是您希望从静态 Web 应用程序连接到的 API。因此,如果您正确设置了 CORS,您可以将 API 发布到任何地方(只要它可以访问 Internet)并从您的前端连接到它。

以下是一些需要考虑的事项:

CORS

跨域资源共享 (CORS) 是一种基于 HTTP 标头的机制,它允许服务器指示浏览器应该从其自身以外的任何来源(域、方案或端口)允许加载资源。 CORS 还依赖于一种机制,浏览器通过该机制向托管跨域资源的服务器发出“预检”请求,以检查服务器是否允许实际请求。在该预检中,浏览器发送指示 HTTP 方法的标头和将在实际请求中使用的标头。

更多信息:Cross-Origin Resource Sharing (CORS)

设置 CORS,以便您的静态托管网站可以访问您在其他地方运行的 API。使用静态 Web 应用程序时,这是为您管理的。

静态网站托管(Azure 存储)

您可以直接从通用 V2 或 BlockBlobStorage 帐户中的容器提供静态内容(HTML、CSS、JavaScript 和图像文件)。

更多信息:Host a static website in Azure Storage

这是从存储帐户托管的静态网站,与静态 Web 应用程序不同(见下文)。在这种情况下,您将网站的静态资产托管在存储帐户中。如果需要证书、自定义域等,则需要添加其他 Azure 资源,例如 CDN。使用静态 Web 应用程序时,这是为您管理的。

静态网页应用

使用静态网络应用程序,静态资产与传统的网络服务器分离,而是由分布在世界各地的点提供服务。由于文件在物理上更接近最终用户,因此这种分布使文件服务速度更快。此外,API 端点使用无服务器架构托管,从而避免了对完整后端服务器的需求。

更多信息:What is Azure Static Web Apps?

但是,您可以选择仅使用 Azure 静态 Web 应用程序的静态资产部分,并让您的 API 在其他地方运行。

教程

就教程而言:您可能会发现这个很有趣:Host a RESTful API with CORS in Azure App Service

Azure 应用服务提供高度可扩展、自我修补的 Web 托管服务。此外,应用服务内置了对 RESTful API 的跨域资源共享 (CORS) 的支持。本教程展示了如何将 ASP.NET Core API 应用部署到具有 CORS 支持的应用服务。您使用命令行工具配置应用程序并使用 Git 部署应用程序。

【讨论】:

    【解决方案2】:

    看这个https://stackoverflow.com/a/70675328/6727650

    我在一个 AngularJS 应用程序中遇到了一个错误,它很简单,但使用了指令。决议如下。

    在 repo 的根目录中创建一个文件 staticwebapp.config.json 并添加以下配置:

    {
      "globalHeaders": {
        "Access-Control-Allow-Origin": "*",
        "Access-Control-Allow-Methods": "GET, OPTIONS"
      }
    }
    

    发布您的应用程序并重新测试。成功解决! 下面我的 AngularJS 是如何项目到项目的

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-12-06
      • 2021-05-25
      • 2018-11-21
      • 2022-11-08
      • 1970-01-01
      • 2016-05-04
      • 2019-08-15
      相关资源
      最近更新 更多