7

Ho CORS lavorare con il seguente:WebAPI CORS - perché la richiesta OPTIONS sta entrando nel mio Controller?

[System.Web.Http.HttpPut] 
[System.Web.Http.AcceptVerbs("OPTIONS")] 
[System.Web.Http.Route("api/exercise")] 
public HttpResponseMessage UpdateExercise(Exercise exercise) { 
    try { 
     _adminService.UpdateExercise(exercise); 
     return Request.CreateResponse(HttpStatusCode.OK, "Success"); 
    } catch (Exception e) { 
     return Request.CreateResponse(HttpStatusCode.InternalServerError, e); 
    } 
} 

Nel mio global.asax:

protected void Application_BeginRequest() { 
    if (Request.Headers.AllKeys.Contains("Origin") && Request.HttpMethod == "OPTIONS") { 
     Response.Flush(); 
    } 
} 

Ma qualcosa di strano sta succedendo - se ho impostato un punto di interruzione nel mio controller, la richiesta OPTIONS fa il suo modo di l'interno con un esercizio null. Perché sta succedendo? Mi aspetto che lo Flush() prevenga questo.

Allo stato attuale, ho bisogno di aggiungere controlli per null a tutti i miei endpoint CORS (PUT, DELETEs). Ciò sembra inelegante ... dovrei essere in grado di impedire alle richieste OPTIONS di colpire la logica del controller, invece di rispondere direttamente con le intestazioni richieste?

+0

@CarlHancke: questo ha funzionato. Sembra che abbia implementato metà di un altro metodo ... sentiti libero di postare come risposta, e grazie mille :) – SB2055

risposta

8

Aggiungendo questo come risposta, in base ai commenti nella domanda.

Il problema è causato dall'accettazione del verbo OPTIONS sul metodo di azione. Il runtime MVC tenta quindi di eseguire il metodo di azione & il problema null.

Rimuovere il verbo in modo che MVC non tenti di eseguire il metodo & l'evento Application_BeginRequest risolve il problema pre-volo per te.

Problemi correlati