2017-06-12 1 views
5

J'ai utilisé deux projets pour mon site. Un pour le projet Mvc et le projet Api. J'ai ajouté ci-dessous le code dans le fichier web.config qui est dans le projet Api,L'en-tête ne peut pas passer en ajax en utilisant le domaine transversal

Access-Control-Allow-Origin: * 
Access-Control-Allow-Methods: GET, POST, PUT, DELETE 
Access-Control-Allow-Headers: Authorization 

méthode d'action comme ci-dessous qui est dans le projet Api,

[HttpPost] 
[Route("api/ajaxapi/caselistmethod")] 
public List<CaseValues> AjaxCaseListMethod() 
{ 
      List<CaseValues> caseList = new List<CaseValues>(); 
      return caseList; 
} 

et appel ajax comme ci-dessous qui est en Mvc projet,

$.ajax({ 
      type: "POST", 
      url: "http://localhost:55016/api/ajaxapi/caselistmethod", 
      beforeSend: function (request) { 
       request.setRequestHeader("Authorization", getCookie("Token")); 
      }, 
      success: function (response) { 
      } 
}); 

Mais encore montrant des erreurs comme ci-dessous,

OPTIONS http://localhost:55016/api/ajaxapi/caselistmethod 405 (méthode non autorisée) XMLHttpRequest ne peut pas charger http://localhost:55016/api/ajaxapi/caselistmethod. La réponse pour le contrôle en amont a un code d'état HTTP non valide 405

mais sans Header, son fonctionnement est correct. J'ai besoin de passer l'en-tête aussi. Alors s'il vous plaît donner n'importe quelle suggestion.

Merci ...

Répondre

3

méthode des options doit être activé pour que « les options » demande avant le vol pour réussir, ce qui doit envoyer en-tête d'autorisation.

Il n'est pas clair comment vous activez les en-têtes dans Web.Config ou ce que vous utilisez pour héberger votre service, il est donc difficile de suggérer une solution exacte. Si vous utilisez IIS extrayez - enabling cross-origin resource sharing on IIS7 pour vous assurer que OPTIONS n'est pas bloqué par IIS. Vous devrez peut-être supprimer les gestionnaires existants ou activer OPTIONS.

Vous pouvez également utiliser l'attribut EnableCors sur la méthode pour autoriser l'activation des "options" pour cette route.

+0

a finalement obtenu la solution et vous sauvé mon temps .. merci @Alexei –

1

Chrome envoie une demande de contrôle en amont (méthode OPTIONS) pour rechercher les en-têtes CORS et envoyer la demande POST.

Mais vous n'autorisez pas les méthodes OPTION.

Essayez

Access-Control-Allow-Methods: GET, POST, PUT, DELETE, OPTIONS 
+1

Je ne crois pas 'Impact de contrôle d'accès-allow-Methods' 405 OPTIONS de se demander. Vous ne devriez pas avoir besoin d'ajouter "OPTIONS" à cette liste car il est improbable de faire un appel inter-domaine OPTIONS (l'appel OPTIONS pré-vol n'est pas considéré comme "interdomaine" par le navigateur car il est fait par le navigateur lui-même) –

+0

Rien ne se passe après avoir autorisé la méthode OPTIONS également. @ S.Dev –