【发布时间】:2021-07-01 11:45:06
【问题描述】:
我目前正在使用 Angular 11 开发一个使用 .Net 5 API 的客户端应用程序。 API 获取请求按预期工作,但是当我发送 POST 请求时它失败并显示错误提示
POST http://localhost:49540/api/create/ 404(未找到)
http://localhost:49540/api/create/ 的 Http 失败响应:404 Not Found
我尝试删除末尾的斜杠,但没有帮助。
这是我的 API 操作方法
[Route("api/[controller]")]
[ApiController]
public class BooksController : ControllerBase
{
[HttpPost]
[Route("create")]
public async Task<IActionResult> AddBook(CreateBook model)
{
var book = mapper.Map<Book>(model);
// Replace value with userManager.GetUserId(User);
try
{
book.CreatedByUserId = Fakes.Faker.FakeUserId();
book.DateCreated = DateTime.Now;
book.BookStatus = BookStatus.Available;
book.BookId = new Guid();
return Ok(await bookService.AddAsync(book));
}
catch (Exception ex)
{
return StatusCode(StatusCodes.Status500InternalServerError, new ResponseMessage
{
Succeeded = false,
Errors = new List<string>() { ex.Message }
});
}
}
}
客户端代码
addBook(book: CreateBook): Observable<CreateBook> {
return this.httpClient.post<CreateBook>(baseURL + 'create', book, {
headers: new HttpHeaders({
'Content-Type': 'application/json'
})
}).pipe(catchError(this.handleError));
}
handleError(errorResponse: HttpErrorResponse): Observable<never> {
if (errorResponse instanceof ErrorEvent) {
console.error("Client side error: ", errorResponse);
} else {
console.error("Server side Error: " + errorResponse.message);
}
return throwError("Message");
}
我已将 CORS 配置为允许任何标头、方法和来源。 问题是什么?是我的代码还是遗漏了什么?我很困惑,因为 get 请求正常工作,post 请求也在 Swagger 中工作。
【问题讨论】:
-
尝试从网址中删除
/api/。控制器上有路由属性吗? -
是的,检查代码
-
我在你的 action 上看到了一个 Route 属性,我在问 controller(类)上是否有一个属性。哪个网址给你 200?
-
那么您在 url 中缺少控制器的名称。
-
是的。它应该是 api/books/create