wie behandeln "OPTIONEN" - Methode ist in ASP.NET MVC
Mein Sencha-Touch-app ist die Buchung ein Formular, um meine asp.net-mvc-3 WebService, aber anstatt POST
es schickt OPTIONS
.
Bin ich beim Lesen einen ähnlichen thread hier, aber ich weiß einfach nicht, wie man mit den OPTIONS
Methode in meinem code.
Ich habe versucht, das hinzufügen der [AllowAjax]
Attribut zu meiner Aktion, aber es scheint nicht zu existieren, in MVC3.
OPTIONEN /GetInTouch/CommunicateCard HTTP/1.1
Host: webservice.example.com
Referer: http://192.168.5.206/
Access-Control-Request-Methode: POST
Herkunft: http://192.168.5.206
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_7_0) AppleWebKit/534.24 (KHTML, like Gecko) Chrome/11.0.696.71 Safari/534.24
Access-Control-Request-Headers: X-Requested-With "Content-Type"
Akzeptieren: /
Accept-Encoding: gzip,deflate,sdch
Accept-Language: en-US,en;q=0.8
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.3
In meinem ActionMethod, ich bin mit dem folgenden code.
public JsonpResult CommunicateCard(CommunicateCard communicateCard)
{
//Instantiate a new instance of MailMessage
MailMessage mMailMessage = new MailMessage();
//removed for security/brevity
//Set the body of the mail message
mMailMessage.Body = communicateCard.name; //THIS IS CURRENTLY BLANK :-(
//removed for security/brevity
mSmtpClient.Send(mMailMessage);
//do server side validation on form input
//if it's valid return true
//else return false
//currently returning NULL cuz I don't care at this point.
return this.Jsonp(null);
}
InformationsquelleAutor Chase Florell | 2011-08-09
Du musst angemeldet sein, um einen Kommentar abzugeben.
Stellt sich heraus, ich hatte zum erstellen einer
ActionFilterAttribute
Hmmm dieses zurück nicht die richtigen Header in der Antwort auf die OPTIONS-Anforderung für mich 🙁 ... stackoverflow.com/questions/37216939/cors-requests-and-mvc5
InformationsquelleAutor Chase Florell
Ich habe Folgendes in meine
<system.webServer>
config-Abschnitt:InformationsquelleAutor mike kozelsky
Löste ich dieses in einer anderen Weise in MVC und IIS. Der Grund, ich fand das problem war, weil ich wollte, um POST-Daten von client-side javascript (JSONP funktioniert nicht), und obendrein zulassen wollten JSON-Daten, die sitzt in den Inhalt der POST-Anfrage.
In Wirklichkeit dein code will zu ignorieren, die ersten CORS OPTIONS-Anforderung, so ist dies wahrscheinlich eine "site-wide-Einstellung", und nicht pro API-Aufruf festlegen.
Zuerst habe ich IIS konfiguriert ist zum senden der CORS-Reaktion, diese kann getan werden, mithilfe von IIS-manager (oder über web.config-updates), wenn Sie IIS verwenden, dann gehen Sie zu der Website, die Sie möchten, fügen Sie diese beiden Werte:
Dann erstellte ich eine benutzerdefinierte ActionFilter, die angewendet werden muss, für jeden controller, den Sie akzeptieren möchten-POST-Daten, die auslösen könnte eine CORS Anfrage. Die benutzerdefinierte Aktion filter:
Dann am Anfang jeder controller, den Sie brauchen, um dies zu übernehmen für das hinzufügen eines Attributs, z.B.:
Nun, ich bin sicher, es gibt eine Möglichkeit, dies über Ihre ganze MVC-Lösung (Lösungen willkommen), aber brauchen, um ein BBQ und die Lösung oben funktioniert!
InformationsquelleAutor From Orbonia
Nur eine Antwort auf die Frage, warum "OPTIONEN" und nicht "POST", weil der browser die Umsetzung CORS (Cross-origin resource sharing ).
Dies ist ein zwei Teil-Prozess des Sendens die OPTIONS-Anforderung zuerst, dann, wenn der server antwortet mit akzeptablen Bedingungen, der browser setzt dann die eigentliche Anfrage mit Daten /Inhalte.
InformationsquelleAutor From Orbonia
Ich habe versucht, alle Antworten hier und keiner arbeitete. Ich schließlich erkannte, dass die Browser behandeln den pre-flight-check als fehlgeschlagen, wenn gibt es nicht 200. In meinem Fall, wurde IIS Rückkehr 404, auch mit den Kopfzeilen. Das ist, weil ich hatte 2 Attribute auf meinem controller-Methode - [HttpPost] und [HttpOptions]. Offenbar ist dies kein Gültiger Mechanismus für den Ausdruck von mehreren Verben. Ich hatte mit diesem Attribut statt: [AcceptVerbs(HttpVerbs.Optionen | HttpVerbs.Post)]
InformationsquelleAutor r590