You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

1&1 Windows主机子文件夹部署ASP.NET Core与Angular应用方案

可行性结论

你规划的子文件夹部署方案完全可行,不需要IIS应用创建权限,仅通过调整web.config路由规则和ASP.NET Core启动配置即可实现。
子文件夹部署失效的核心原因有两点:

  • 根目录应用的默认路由规则拦截了子文件夹路径的请求,没有转发给子目录应用处理
  • 子目录部署的ASP.NET Core应用未配置匹配的路径基址,导致控制器路由、静态资源路径匹配失败
推荐部署方案(根目录放Angular前端,/api子目录放Web API)

这个结构完全匹配你的访问规则,配置成本最低,按以下步骤操作即可:

1. 根目录Angular应用配置

如果根目录部署的是纯Angular静态站点:

  • 构建Angular项目时保持base href="/"配置不变,确保静态资源路径正常
  • 在根目录添加web.config文件,配置URL重写规则,将/api开头的请求直接放行到子目录,其余请求交给Angular前端路由处理,配置示例:
<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <system.webServer>
    <rewrite>
      <rules>
        <!-- 放行API请求,不做前端路由重写 -->
        <rule name="SkipApi" stopProcessing="true">
          <match url="^api/(.*)" />
          <action type="None" />
        </rule>
        <!-- Angular前端路由重写规则 -->
        <rule name="AngularRoutes" stopProcessing="true">
          <match url=".*" />
          <conditions logicalGrouping="MatchAll">
            <add input="{REQUEST_FILENAME}" matchType="IsFile" negate="true" />
            <add input="{REQUEST_FILENAME}" matchType="IsDirectory" negate="true" />
          </conditions>
          <action type="Rewrite" url="/" />
        </rule>
      </rules>
    </rewrite>
  </system.webServer>
</configuration>

如果根目录部署的是集成Angular的ASP.NET Core应用,除了上述重写规则,还需要在web.config的aspNetCore节点前添加规则,确保/api请求不会被根应用的ASP.NET Core模块拦截。

2. /api子目录Web API配置

首先修改API项目的启动代码,在所有中间件注册最前面添加路径基址配置,让框架自动剥离/api前缀匹配控制器路由,不需要修改任何现有控制器的Route特性:

// Program.cs (.NET 6+ 顶级语句模板)
var builder = WebApplication.CreateBuilder(args);
// 其他服务注册代码...
var app = builder.Build();

// 这行必须放在所有中间件最前面
app.UsePathBase("/api");

// 其他中间件配置(UseHttpsRedirection、UseRouting、UseAuthorization、MapControllers等)保持不变
app.MapControllers();
app.Run();

然后在/api子目录下放置发布后的API文件,同时修改子目录下的web.config,先清除继承自根目录的重写规则,再配置ASP.NET Core模块处理请求,核心配置示例:

<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <system.webServer>
    <!-- 清除根目录继承的规则,避免冲突 -->
    <rewrite>
      <rules>
        <clear/>
      </rules>
    </rewrite>
    <handlers>
      <remove name="aspNetCore"/>
      <add name="aspNetCore" path="*" verb="*" modules="AspNetCoreModuleV2" resourceType="Unspecified"/>
    </handlers>
    <aspNetCore processPath="dotnet" arguments=".\你的Api项目Dll名称.dll" stdoutLogEnabled="false" stdoutLogFile=".\logs\stdout" hostingModel="inprocess"/>
  </system.webServer>
</configuration>

注意:1&1 Windows商务主机默认已经配置好ASP.NET Core运行时,不需要自行上传dotnet运行时,processPath保持dotnet即可。

3. 验证注意点

  • Angular项目中发起API请求时使用相对路径/api/xxx即可,不需要额外配置跨域
  • 两个项目发布时选择框架依赖模式即可,不需要打包独立运行时,可大幅减小发布文件体积
  • 如果出现500错误,可以临时把两个项目web.config里的stdoutLogEnabled设为true,查看生成的日志排查问题
替代方案

如果配置web.config遇到难以排查的权限或规则冲突问题,推荐使用更简单的二级域名方案:

  • 根域名myDomain.com绑定Angular前端应用,部署在根目录
  • 新增二级域名api.myDomain.com绑定Web API应用,部署在主机分配的二级域名对应根目录
  • 两个应用都按单应用根目录部署的方式配置即可,不需要修改路径基址、不需要编写复杂的重写规则,几乎不会出现部署冲突,是共享主机部署多应用的最稳妥方案。

你提到的另一种「根目录放API、子目录放Angular」的结构也可以实现,但需要额外配置静态资源路径、前端路由重写规则,出错概率更高,不推荐使用。


内容的提问来源于stack exchange,提问作者Alex Ibrahim Ojea

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.29 06:51:23