Tôi có phương pháp hành động sau trên một bộ điều khiển trong một dự án Web API ASP.NET:ASP.NET Web Api trả về 200 OK khi nó phải trả lại 404
[Route("api/v2/project/{projectId}/stuff"), HttpGet]
public IHttpActionResult Get(int projectId)
[Route("api/v2/project/{projectId}/stuff/{id:guid}"), HttpGet]
public IHttpActionResult Get(int projectId, [FromUri] Guid id)
[Route("api/v2/project/{projectId}/stuff"), HttpPost]
public IHttpActionResult Post(int projectId, [Required] Stuff stuff)
[Route("api/v2/project/{projectId}/stuff/{id:guid}"), HttpPut]
public IHttpActionResult Put(int projectId, [FromUri] Guid blastId, Stuff stuff)
[Route("api/v2/project/{projectId}/stuff/{id:guid}"), HttpDelete]
public IHttpActionResult Delete(int projectId, [FromUri] Guid id)
Do một lỗi javascript, tôi đã thực hiện một DELETE
yêu cầu
api/v2/project/1234/stuff/undefined
tức là thay vì một GUID
cho id, tôi có chuỗi "undefined"
. Theo như tôi có thể nói, điều này không phù hợp với bất kỳ tuyến đường nào của tôi, nhưng thay vì một số 404 Not found
(hoặc thậm chí 405 Method not allowed
), tôi nhận được một phản hồi là 200 OK
.
Tôi đặt điểm ngắt trong mỗi phương thức hành động này và lặp lại yêu cầu bằng Fiddler, nhưng không có điểm ngắt nào bị trúng. Tôi cũng đã thử cài đặt gói WebApiRouteDebugger từ nuget, nhưng chúng tôi đang sử dụng một nhà máy điều khiển tùy chỉnh móc mọi thứ thông qua vùng chứa DI của chúng tôi, vì vậy tôi không thể làm việc đó được. Tôi thậm chí đã cố gắng ném ngoại lệ sau đây từ một trong các bộ lọc đăng ký trên toàn thế giới của tôi:
throw new Exception(actionContext.ControllerContext.ControllerDescriptor.ControllerName +
" " + actionContext.ActionDescriptor.ActionName);
nhưng yêu cầu DELETE
vẫn đi qua để 200 OK
(không yêu cầu đối với các url hợp lệ dường như để làm điều đó).
Tôi có thể khắc phục sự cố này bằng cách nào khác? Nguyên nhân gốc rễ có thể là gì?
Tôi đã tạo dự án Web APi mới và thêm bộ điều khiển với các phương pháp và định tuyến của bạn để kiểm tra. Thật không may hoạt động tốt. Đối với url 'api/v2/project/{project Id}/stuff/{id: guid}' Tôi gặp lỗi 404. Tôi nghĩ rằng đó là vấn đề với định tuyến không chính xác trong bộ điều khiển khác hoặc url với 'không xác định' phù hợp với tuyến đường khác. –
@BartoszCzerwonka: Cảm ơn bạn đã dành thời gian để làm điều đó. Dự án là lớn, đó là lý do tại sao tôi không bao gồm tất cả các tuyến trong toàn bộ dự án - tuy nhiên, tôi đã kiểm tra cẩn thận và không có tuyến nào trong dự án khớp với 'api/v2/project/{ projectId}/stuff/ 'ngoại trừ trong bộ điều khiển này. –
Ngoài ra, chỉ có duy nhất một trong số chúng chấp nhận yêu cầu 'DELETE' - và đó là yêu cầu không có điểm ngắt. –