ho i seguenti metodi di azione in un controller in un progetto Web API ASP.NET:ASP.NET Web API restituisce 200 OK quando deve restituire 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)
A causa di un errore di javascript, ho fatto un DELETE
richiesta di
api/v2/project/1234/stuff/undefined
cioè invece di un GUID
per l'id, ho avuto la stringa "undefined"
. Per quanto posso dire, questo non dovrebbe corrispondere a nessuno dei miei percorsi, ma invece di uno 404 Not found
(o anche 405 Method not allowed
), ho ricevuto un 200 OK
come risposta.
Ho impostato un punto di interruzione in ciascuno di questi metodi di azione e ho ripetuto la richiesta utilizzando Fiddler, ma nessuno dei punti di interruzione è stato raggiunto. Ho anche provato a installare il pacchetto WebApiRouteDebugger da nuget, ma stiamo usando una factory controller personalizzata che collega le cose attraverso il nostro contenitore DI, quindi non ho potuto farlo funzionare affatto. Ho anche provato a lanciare la seguente eccezione da uno dei miei filtri registrati a livello globale:
throw new Exception(actionContext.ControllerContext.ControllerDescriptor.ControllerName +
" " + actionContext.ActionDescriptor.ActionName);
ma la richiesta DELETE
ancora passa attraverso al 200 OK
(nessuna richiesta di URL validi sembrano farlo).
In quale altro modo è possibile risolvere il problema? Quale potrebbe essere la causa principale?
Ho creato un nuovo progetto Web APi e aggiunto controller con i metodi e il routing per i test. Purtroppo funziona bene. Per url 'api/v2/project/{ID progetto}/stuff/{id: guid}' Ho 404 errori. Penso che sia un problema con il routing scorretto in altri controller o url con corrispondenze 'indefinite' ad altre route. –
@BartoszCzerwonka: Grazie mille per aver trovato il tempo per farlo. Il progetto è di grandi dimensioni, motivo per cui non ho incluso tutti i percorsi nell'intero progetto - tuttavia, ho controllato attentamente, e non ci sono percorsi nel progetto che corrispondono a api/v2/project/{ projectId}/stuff/ 'tranne che in questo controller. –
Inoltre, ce n'è solo uno che dovrebbe accettare le richieste DELETE - ed è quello in cui non viene colpito alcun punto di interruzione. –