【问题标题】:.Net Core "Http failure response 404 Not Found" error [duplicate].Net Core“找不到Http失败响应404”错误[重复]
【发布时间】:2019-10-22 12:39:51
【问题描述】:

我刚刚开始进入 netcore 2.2,我正试图从 angular 调用我的控制器,但是当我从我的服务调用发送联系人电子邮件方法时,我收到“http://localhost:53270/api/DataController/SendContactEmail/ 的 Http 失败响应:404 不是找到”

你可以清楚地看到我在下面的例程中明确写出了路线

 sendContactEmail(contact: ISubmitModel): Observable<any> {
        return this._http.post<any>('api/DataController/SendContactEmail/', contact)      
    }

和我的控制器方法

[Route("api/[controller]")]
public class DataController : Controller
{
    [HttpPost("[action]")]
    public IActionResult SendContactEmail(ContactUs contact)
    {
        ContactUs form = new ContactUs()
        {
            Email = contact.Email,
            Name = contact.Name,
            Phone = contact.Phone,
            Message = contact.Message
        };

        return Ok(form);
    }

    public class ContactUs
    {
        public string Name { get; set; }
        public string Phone { get; set; }
        public string Email { get; set; }
        public string Message { get; set; }            
    }
}

【问题讨论】:

  • 你的 api 路由应该是'api/Data/SendContactEmail'
  • 正如@penleychan 提到的,您不需要在 Data 之后添加“Controller”字样,当 MVC 生成路由时,它只使用控制器名称,即 Data 而不是 DataController
  • @penleychan 所以我试过了,现在得到这个错误“POST localhost:51889/api/Data/SendContactEmail 404(未找到)”我还需要做些什么吗?我需要注册这个控制器吗?
  • @TerranceJackson 你确定端口的 url 是正确的吗?
  • @Sajeetharan 是的,我正在使用 dotnet run 命令给我的 url。但是当我只从 vs2019 直接运行 IIS 时,它可以使用 Postman 应用程序。它只是不能用我的 angular 8 和 dot net run 命令运行

标签: c# angular asp.net-core asp.net-core-mvc


【解决方案1】:

您应该省略 Controller 部分,只使用数据

return this._http.post<any>('http://localhost:51889/api/Data/SendContactEmail/', contact)   

【讨论】:

  • 我试过这个,它仍然给出错误。在进一步测试从 vs2019 与 PostMan 一起运行 iis express 后,此链接有效localhost:9220/api/Data/SendContactEmail 但是当我从“dotnet run”运行应用程序并从那里使用本地主机链接时,它不起作用。所以 dotnet run 发生了一些事情,只是从 vs2019 运行 iis
  • 你需要添加http
【解决方案2】:

正如其他人所提到的,您不应该在路由中使用 Controller 这个词,因为您在路由中使用带有模板 [controller] 的路由属性,它只会使用名称该控制器的名称,但不包括控制器字。

为了使其更具可读性,您可以更改 api/data 的模板 api/[controller],以免造成混淆。 这往往是一个好习惯,因为 如果将来某天您出于某种原因决定更改控制器的名称,并且您已将路由与控制器名称绑定,那么 api 的消费应用程序将会中断,因为路由会更改(您不会不想要),显然消费应用程序必须更改对该路由的所有引用才能正常工作。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-11-29
    • 2021-01-20
    • 1970-01-01
    • 1970-01-01
    • 2021-12-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多