我刚刚开始进入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; }
}
}
您应该省略Controller
部分,只使用数据
return this._http.post<any>('http://localhost:51889/api/Data/SendContactEmail/', contact)
正如其他人所提到的,您不应该在路由中使用控制器一词,因为您将路由属性与路由内的模板 [controller] 一起使用,它只会采用该控制器的名称,而不包含控制器单词。
为了使其更具可读性,您可以更改 api/data 的模板 api/[controller],这样就不会造成混淆。这往往是一种很好的做法,因为如果将来有一天您出于某种原因决定更改控制器的名称,并且已将路由绑定到控制器名称,则 API 的消费应用程序将中断,因为路由会发生变化(您不希望这样(,显然消费应用程序必须更改对该路由的所有引用才能正常工作。