如何在 IIS 上使用 ASP.NET Core 3.1 API 部署 Angular SPA?

2024-02-29

我想象应该是简单的场景;有

  1. Angular 8 SPA
  2. ASP .NET Core 3.1 Web API

想在Windows Server上部署IIS的已通读:使用 IIS 在 Windows 上托管 ASP.NET Core https://learn.microsoft.com/en-us/aspnet/core/host-and-deploy/iis/?view=aspnetcore-3.1

想要使用推荐的默认进程内托管模型

但是如何将 Angular SPA 和 .net core Web api 结合起来呢?我可以让 Web api 在 IIS 中的新站点下正常运行,从发布输出提供文件,但将我的 SPA 放在哪里?

  • 将 Angular 构建与发布输出混合在一起?
  • 为 Web API 创建子应用程序,但 IIS 然后添加一个别名,所以我的路由如下api/blah become alias/api/blah
  • 使用其他主机模型和代理来运行在不同端口上的 Kestrel 服务器?
  • 某些 wwwroot 目录要重定向到,因此导航到网站可以从那里提供 SPA 服务吗?

我看看如果使用 Angular 模板创建解决方案,它会创建一个ClientApps/distdir,也许可以使用该模板重新创建项目,然后在部署时将 Angular 构建转储到该目录中(因为 Angular 项目是在单独的存储库中开发的)。

            // In production, the Angular files will be served from this directory
            services.AddSpaStaticFiles(configuration =>
            {
                configuration.RootPath = "ClientApp/dist";
            });

看到这个问题已经一个月了。希望您已经找到解决方案。 @JokiesDing 的评论非常切题。

我的开发和部署方法是将 SPA 应用程序放在 Web API 项目中并利用Microsoft.AspNetCore.SpaServices.Extensions。步骤如下:

  1. Create an Angular Application and put it inside your application directory. For example, I usually create an ClientApp Folder inside the project and place my angular app inside. project directory
  2. Install Microsoft.AspNetCore.SpaServices.Extensions来自努吉特
  3. 去你的Startup.cs并添加扩展方法
public void ConfigureServices(IServiceCollection services)
{
   //... whatever you have in your ConfigureServices method...

   //add this
   services.AddSpaStaticFiles(configuration =>
   {
      configuration.RootPath = "ClientApp/dist";
   });
}

public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
    //... whatever you have in your configure method...

    //add this
    app.UseStaticFiles();
    if (!env.IsDevelopment())
    {
       app.UseSpaStaticFiles();
    }


   app.UseSpa(spa =>
   {
     // To learn more about options for serving an Angular SPA
     // see https://go.microsoft.com/fwlink/?linkid=864501
     spa.Options.SourcePath = "ClientApp";
     if (env.IsDevelopment())
     {
         spa.UseAngularCliServer(npmScript: "start");
     }
    });
}
  1. 奖金!如果你不想跑npm run start每次构建时,您都可以将 webapi 指向 SPA 开发服务器。
 if (env.IsDevelopment())
 {
   spa.UseProxyToSpaDevelopmentServer("http://localhost:4200");
 }

如需参考,请参阅此入门模板https://github.com/jasontaylordev/CleanArchitecture https://github.com/jasontaylordev/CleanArchitecture

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在 IIS 上使用 ASP.NET Core 3.1 API 部署 Angular SPA? 的相关文章

随机推荐

  • 如何使用 java 中的 swing 在 jeditorpane 中的超链接上添加悬停效果

    使用jEditorPane 中的超链接 https stackoverflow com questions 3693543 hyperlink in jeditorpane链接 我设法在 jEditorPane 中获取超链接 但现在我想为超
  • 开发过程中样式未应用于 vue web 组件

    在开发 Vue Web 组件时 style不应用于Web组件 而是添加到head该文件的 这意味着样式在影子 DOM 中被忽略 以下是我在 main js 中包装 Web 组件的方法 import Vue from vue import w
  • Multer 和快速验证器在验证中造成问题

    我正在提交带有图像的表格 使用下面的代码 router post upload upload image single categoryLogo categoryRules categoryCreationRules validate ca
  • 引用外部对象的 JavaScript 作用域

    基本上 我使用一个名为的元类框架Joose http joose it对于 Javascript 它允许我使用更优雅的类语法 但我不知道如何从类声明的更深层次方法中引用对象的范围 我还使用 require js 进行依赖管理 这是一个类定义
  • jQuery自动上下滚动div

    我写了一个fiddle http jsfiddle net f7e3d440 8 自动上下滚动 div 效果很好 但是向下滚动时存在问题 它不显示最后一行 在本例中为 String4 有人可以帮我解决这个问题吗 div class cont
  • 在 ASP.Net 中运行时按名称隐藏 GridView 列

    是否可以在运行时按名称显示 隐藏 GridView 列 我可以通过索引来做到这一点 如下所示 gridReviews Columns 4 Visible false 不过我想执行以下操作 gridReviews Columns Name V
  • Terraform:如何读取地图列表?

    请参阅下面的示例 data aws kms secrets api key count length keys var keys secret name secret name payload element values var keys
  • 显式保存与隐式保存 - 什么时候更喜欢什么?

    我目前正在开发一个 wp7 应用程序 不想透露太多 但我在用户交互方面遇到了一些困难 我不确定的主要问题是 我应该在对话框中提供显式保存按钮并使用手机后退按钮作为取消 还是应该隐式保存用户点击手机后退按钮的时间 我想得越多 我就越不确定什么
  • 如何在 Scala JLine 调用之间保存和加载历史记录

    我在用着Scala JLine http search maven org artifactdetails 7Corg scala lang virtualized 7Cjline 7C2 10 2 RC1 7Cjar在我的 CLI 程序中
  • MySQL 5.5 至 5.7 停止使用索引

    我有 Magento 1 9 2 1 并在Apache2和MySQL 5 5上成功运行 我尝试将其迁移到另一台服务器并使用 NGINX 和 MySQL 5 7 但网站开始变得非常慢 12 秒对 2 秒 经过几个小时的调试 我发现一个查询有问
  • 简单的 PHP 联系表格未发送[关闭]

    这个问题不太可能对任何未来的访客有帮助 它只与一个较小的地理区域 一个特定的时间点或一个非常狭窄的情况相关 通常不适用于全世界的互联网受众 为了帮助使这个问题更广泛地适用 访问帮助中心 help reopen questions 发完更多帖
  • 如何在Steam WebAPI中通过AppName获取steam AppID

    所以我试图通过输入游戏名称来启动蒸汽游戏 为此我问自己是否可以通过输入的名称找出steam App ID 所以我尝试通过我的 steamApps 文件夹收集 ID 但没有成功 我还找到了一个网站 您可以在其中搜索特定游戏的名称 例如 htt
  • 期间发生内部错误:“更新 Maven 项目

    当我转换为 Maven 项目时 错误是 gt An internal error occurred during Updating Maven Project gt Unsupported IClasspathEntry kind 4 有什
  • 使用 Ajax 下载 JQuery 文件

    当我的用户选择生成报告时 我使用 John Culviner 出色的 fileDownload 插件来生成 请稍候 消息 当用户单击链接时 我向 PHP 发送一个 ajax 请求 该请求在服务器上生成 PDF 此时 我正在尝试更新 file
  • 调用未定义的函数curl_init(),即使它在php7中启用

    我刚刚在我的 Ubuntu 上安装了 php7 起初 没有任何问题 我的网站可以运行 但突然间 它开始返回 Call to undefined function curl init 错误 现在 我的页面包含的curl代码不起作用 在 php
  • 在 SwiftUI 3.0 iOS 15 中调整视图与键盘显示

    我的注册页面有VStack嵌入一 个ScrollView嵌入在VStack 在最里面VStack我有一系列TextField与定制TextFieldStyle 注册页面的 UI 如下所示 VStack ScrollView VStack s
  • Azure Powershell Linux

    除了 Linux Azure Powershell 之外 是否还有更多适用于 Linux Azure Powershell 的 cmdlet 是否有 Azure Powershell 的官方存储库对于Linux 有没有办法让终端在启动时启动
  • android 中的 vimeo 视频为 .mp4 格式

    我想在我的 Android 应用程序中播放 vimeo 视频 要播放我需要 mp4 格式的视频 我在下面的链接中有用户将视频获取为 mp4 格式 当我在浏览器中点击此网址时 它会要求我将文件另存为 mp4 格式 但是当我尝试通过编码获得相同
  • 自定义绘制控件的糟糕性能

    我正在做简单的图形控制wpf 我无法解释也无法解决性能问题 与 winform 相比 它太慢了 也许我做错了什么 我准备了demo来演示这个问题 这是测试控制 public class Graph FrameworkElement priv
  • 如何在 IIS 上使用 ASP.NET Core 3.1 API 部署 Angular SPA?

    我想象应该是简单的场景 有 Angular 8 SPA ASP NET Core 3 1 Web API 想在Windows Server上部署IIS的已通读 使用 IIS 在 Windows 上托管 ASP NET Core https