7

Ich habe CORS mit der Arbeit folgende:WebAPI CORS - warum kommt die OPTIONS-Anfrage in meinen 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); 
    } 
} 

In meinem global.asax:

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

Aber etwas seltsam passiert - wenn ich einen Haltepunkt in meinem Controller setzen, macht die OPTIONS-Anforderung seinen Weg zu die Innereien mit einer null Übung. Warum passiert dies? Ich würde erwarten, dass die Flush() dies verhindert.

So wie es aussieht, muss ich für alle meine CORS-sensitiven Endpunkte (PUTs, DELETEs) Checks auf null setzen. Dies scheint unelegant zu sein ... sollte ich in der Lage sein zu verhindern, dass OPTIONS-Anfragen die Steuerungslogik treffen, anstatt einfach sofort mit den erforderlichen Headern zu antworten?

+0

@CarlHancke - das hat den Trick gemacht. Sieht so aus, als ob ich die Hälfte einer anderen Methode implementiert hätte ... fühle mich frei, als Antwort zu posten, und vielen Dank :) – SB2055

Antwort

8

Hinzufügen dieser als Antwort, basierend auf den Kommentaren in der Frage.

Das Problem wird durch die Annahme des Verbs OPTIONS auf der Aktionsmethode verursacht. Die MVC-Laufzeit versucht dann, die Aktionsmethode & auszuführen, wobei das null Problem auftritt.

Entfernen Sie das Verb, damit MVC nicht versucht, die Methode auszuführen & das Ereignis Application_BeginRequest wird das Problem vor dem Flug für Sie aussortieren.

Verwandte Themen