带有 MVC 的 Angular CLI 从 API 调用返回 404

Posted

技术标签:

【中文标题】带有 MVC 的 Angular CLI 从 API 调用返回 404【英文标题】:Angular CLI with MVC returning 404 from API call 【发布时间】:2022-01-12 16:14:51 【问题描述】:

我正在开发一个组合的 .Net Core 3.1、Angular 8 项目。

Angular 代码嵌入在包含 MVC 代码的 Visual Studio 项目中,位于 ClientApp 文件夹下

我对 .Net 很好,但 Angular 对我来说是 2 天前的新手。

我正在尝试让 Angular 代码调用 MVC API

我一直在关注一些视频和教程,我想出了这个作为一种概念证明。

角度代码

import  Component, OnInit  from "@angular/core";
import  HttpClient  from '@angular/common/http';

@Component(
  selector: 'people-list',
  templateUrl: "peopleListView.component.html"
)

export class PeopleListView implements OnInit 

  constructor(private http: HttpClient)  
  
  ngOnInit() 
    let test = "";
    test = "/api/Person/GetPeopleList";
    this.http.get(test).subscribe((data: any) => console.log(data), (err: any) => console.log(err));
  

MVC 代码

[ApiController]
[Route("api/[controller]")]
public class PersonController : Controller

    public PersonController()
    
    

    [Route("api/[controller]/[action]")]
    [HttpGet]
    public List<Person> GetPeopleList()
    
        List<Person> people = new List<Person>
               new PersonId = 1, Name = "Scott",
               new PersonId = 2, Name = "Bill"
               ;

        return people;
    

我可以看到 Angular 代码上的断点被命中,因此我之前的 Angular 代码正在运行,但 GetPeopleList() 方法没有被命中,并且出现 404 错误。

我在路线上尝试了许多变化,例如[Route("api/[controller]]")] 但无济于事。

我哪里出错了?

更新 看到我的代码正在请求localhost:5001/api/Person/GetPeopleList 我想知道 API 是否实际上位于端口 5001 上,因为它由 Angular 应用程序控制。

【问题讨论】:

连接它的网站地址 http://yoursite//api/Person/GetPeopleList 用于测试变量还查看网站开发工具,它在什么地址请求 我可以从控制台日志中看到请求的 URL 是:localhost:5001/api/Person/GetPeopleList。所以网站地址会被自动连接。 哦,知道了,而不是 [] 使用 用于控制器上的路由 据我所知,[] 是使用令牌替换时的正确约定。我尝试改用 ,但它也不起作用。我删除了令牌并使用了明确的路线 [Route("api/test/GetPeopleList")] 和 [Route("api/test")]。它们也不起作用,我仍然得到 404。 尝试启用 CORS 【参考方案1】:

您必须通过在开头添加“~/”来修复路线。表示路由从路由开始,你当前的路由需要".../api/person/api/person/getPeolelist" url

 [Route("~/api/Person/GetPeopeList")]
 public List<Person> GetPeopleList()

【讨论】:

以上是关于带有 MVC 的 Angular CLI 从 API 调用返回 404的主要内容,如果未能解决你的问题,请参考以下文章

Angular Cli 警告:不推荐使用选项“entryComponent”:从带有 Ivy 的 9.0.0 版开始,不再需要 entryComponents

在 Angular 2 和 Spring MVC 中上传带有其他表单字段的文件

带有快速项目的 angular-cli

带有 Express js 的 Angular 2 cli

带有primeng 404问题的angular-cli@webpack

带有 Spring Boot 的 Angular CLI