comment gérer "OPTIONS Method" dans ASP.NET MVC
Mon Sencha Touch app, l'affichage d'un formulaire pour mon asp.net mvc-3 WebService, mais au lieu de les envoyer POST
c'est l'envoi de OPTIONS
.
Je suis en train de lire un fil similaire icimais je ne sais pas comment gérer la OPTIONS
méthode dans mon code.
J'ai essayé d'ajouter le [AllowAjax]
attribut de mon Action, toutefois, il ne semble pas exister dans MVC3.
OPTIONS /GetInTouch/CommunicateCard HTTP/1.1
Hôte: webservice.example.com
Referer: http://192.168.5.206/
Contrôle d'accès-Demande-Méthode: POST
Origine: 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
Contrôle D'Accès-Request-Headers: X-Requested-With, Le Type De Contenu
Accepter: /
Accept-Encoding: gzip,deflate,sdch
Accept-Language: fr-fr,fr;q=0.8
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.3
Dans mon ActionMethod, je suis en utilisant le code suivant.
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);
}
source d'informationauteur Chase Florell
Vous devez vous connecter pour publier un commentaire.
S'avère que j'ai dû créer un
ActionFilterAttribute
J'ai résolu ce problème d'une manière différente dans MVC, et IIS. La raison j'ai trouvé ce problème était que je voulais POSTER des données à partir du code javascript coté client (qui JSONP ne fonctionne pas), et sur le dessus de qui a souhaité permettre aux données JSON qui se trouve à l'intérieur du Contenu de la requête POST.
En réalité, votre code veut ignorer la première de la SCRO demande d'OPTIONS, comme cela est susceptible d'être un "site de paramètre d'échelle", et non pas par l'API paramètre d'appel.
D'abord, j'ai configuré IIS pour envoyer de la SCRO de réponse, cela peut être fait par le gestionnaire des services internet (ou à travers internet.config mises à jour), si vous utilisez IIS, puis aller sur le site que vous voulez ajouter ces deux valeurs:
Puis j'ai créé une coutume ActionFilter, qui doit être appliquée pour chaque contrôleur que vous souhaitez accepter de publier des données, ce qui pourrait provoquer un SCRO demande. L'action personnalisée filtre:
Ensuite au début de chaque contrôleur, vous devez appliquer cette pour ajouter un attribut, par exemple:
Maintenant, je suis sûr qu'il y est un moyen de faire cela dans l'ensemble de votre MVC solution (solutions de bienvenue), mais besoin de faire un BARBECUE et de la solution ci-dessus fonctionne!
J'ai ajouté ce qui suit à mon
<system.webServer>
section config:Juste pour répondre à la question de savoir pourquoi les "OPTIONS" et non pas "POST", c'est parce que le navigateur est la mise en œuvre de la SCRO (Cross-origin resource sharing ).
C'est un processus en deux parties de l'envoi de la demande d'OPTIONS d'abord, puis si le serveur répond avec des conditions acceptables le navigateur puis les POSTES de la demande avec des données /contenu.
J'ai essayé toutes les réponses ici, et aucune n'a fonctionné. J'ai finalement réalisé que les navigateurs traiter la visite pré-vol comme un échec si elle renvoie non 200. Dans mon cas, IIS retour 404, même avec les en-têtes. C'est parce que j'ai eu 2 attributs sur mon contrôleur de la méthode [HttpPost] et [HttpOptions]. Apparemment, ce n'est pas valide d'un mécanisme pour exprimer de plusieurs verbes. J'ai eu à utiliser cet attribut au lieu de: [AcceptVerbs(HttpVerbs.Options | HttpVerbs.Post)]