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

已发布的Angular+ASP.NET Core应用无法识别API端点问题

解决Angular访问API时出现“Cannot match any routes”的问题

我之前也碰到过一模一样的问题!这个错误本质是Angular把你的API请求误当成了前端路由去解析,所以才会报路由匹配失败。为啥IIS Express直接跑正常?因为开发环境下Angular CLI的代理会自动帮你把API请求转发到后端,但部署到正式IIS环境就需要手动配置了。下面是具体的解决步骤:

1. 先确认API请求路径没写错

先检查你Angular代码里发起请求的路径,确保是正确的格式:

// 两种正确写法:绝对路径或者基于base href的相对路径
this.http.get('/api/user/info');
// 或者
this.http.get('api/user/info');

要是你写成了user/info(少了api前缀),那Angular肯定会把它当成前端路由,直接报错。

2. 给IIS加URL重写规则(最关键的一步)

部署到IIS时,必须配置URL重写,让两种请求走不同的逻辑:API请求转发到后端,其他请求(前端路由)转发到index.html。

直接在你的Angular项目根目录新建一个web.config文件,把下面内容粘进去:

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
  <system.webServer>
    <rewrite>
      <rules>
        <!-- 优先处理API请求,直接转发到后端 -->
        <rule name="API Routes" stopProcessing="true">
          <match url="^api/(.*)" />
          <!-- 这里替换成你实际的后端地址,如果前后端同站点,直接写/{R:0}就行 -->
          <action type="Rewrite" url="http://你的后端API地址/api/{R:1}" />
        </rule>
        <!-- 所有非文件/目录的请求,都转发到index.html支持Angular路由 -->
        <rule name="Angular Routes" 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="/index.html" />
        </rule>
      </rules>
    </rewrite>
    <!-- 确保静态资源的MIME类型正确,避免加载失败 -->
    <staticContent>
      <mimeMap fileExtension=".json" mimeType="application/json" />
      <mimeMap fileExtension=".woff" mimeType="application/font-woff" />
      <mimeMap fileExtension=".woff2" mimeType="application/font-woff2" />
    </staticContent>
  </system.webServer>
</configuration>

记得把http://你的后端API地址替换成你实际的后端服务地址,如果前后端部署在同一个IIS站点下,直接改成/{R:0}就好。

3. 确认后端路由没问题

从你贴的代码片段来看,后端的路由配置是对的:

[Route("api/user")]
public class UserController : Controller 
{
    [HttpGet("info", Name = "user_info")]
    public Task<IActionResult> Info() 
    {
        var user = (WindowsIdentity)User.Identity;
        // ... 你的业务代码
    }
}

这个路由对应的就是/api/user/info,和你的请求路径完全匹配,所以后端这边应该没毛病。

4. 再核对下base href配置

你说已经设置了<base href="/">,如果你的Angular应用是部署在IIS的根站点下,这个配置是对的。但如果是部署在子目录(比如http://你的域名/app/),那base href得改成<base href="/app/">。不过你开发时正常,大概率这个配置没问题,但还是可以确认下。

5. 开发环境代理配置(参考)

要是你开发时用了Angular CLI的代理,得确保proxy.conf.json配置正确:

{
  "/api/*": {
    "target": "http://localhost:5000", // 你的后端开发地址
    "secure": false,
    "logLevel": "debug"
  }
}

然后在angular.json里指定这个代理文件:

"serve": {
  "builder": "@angular-devkit/build-angular:dev-server",
  "options": {
    "browserTarget": "你的项目名:build",
    "proxyConfig": "proxy.conf.json"
  }
}

不过你说开发时正常,这个应该已经配置好了,就当补充参考吧。

总的来说,90%的概率是IIS没配置URL重写导致的,按照上面的步骤加个web.config应该就能解决问题了。

内容的提问来源于stack exchange,提问作者ad0ran

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 03:36:48