J'ai essayé d'appeler une méthode de contrôleur asp.net avec une chaîne / objet json de javascript.

Le contrôleur asp.net:

public class HomeController : Controller
{

     public ActionResult doWork(string data) {
          // dowork..
          return new EmptyResult();
     }
}

Et dans le javascript est:

var XHR=new XMLHttpRequest();
XHR.open("GET", 'http://localhost:58476/home/dowork', true);
XHR.setRequestHeader("Accept","application/json");
XHR.onreadystatechange = function () {
    if (XHR.readyState == 4 && XHR.status == 200) {
        alert('ok');
    }else{
        alert('not ok');

    }
};
XHR.send(JSON.stringify(queryResult));

Si les javascripts s'exécutent, ils appelleront la méthode dowork dans asp.net, mais les données sont nulles. Et dans de onreadystatechange, il appelle l'alerte «pas ok».

Dans mon journal de console, j'ai trouvé l'erreur:

XMLHttpRequest ne peut pas charger http: // localhost: 58476 / home / dowork. Non L'en-tête 'Access-Control-Allow-Origin' est présent sur le demandé Ressource. L'origine 'http: // localhost: 8081' n'est donc pas autorisée accès.

Quelqu'un sait-il comment résoudre ce problème?

1
user3432681 13 juil. 2015 à 13:06

2 réponses

Meilleure réponse

Une solution simple serait d'ajouter le contrôle d'accès-autoriser-origine.
Vous pouvez l'ajouter à votre fichier web.config comme:

<system.webServer>
    <httpProtocol>
      <customHeaders>
        <add name="Access-Control-Allow-Origin" value="*" />
      </customHeaders>
    </httpProtocol>
</system.webServer>

De plus, vous pouvez envoyer des données uniquement sur demande POST, vous faites une demande GET. Plus d'informations sur la vérification de la méthode d'envoi w3schools
Cela signifie que vous devez changer votre méthode XHR.Open en XHR.open("POST", 'localhost:58476/home/dowork', true);

2
Zippy 14 juil. 2015 à 08:33

De toute évidence, le code javascript envoie une requête à un serveur différent de celui d'où la page a été chargée à l'origine.

Le premier serveur écoute sur le port 8081 et l'autre écoute sur le port 58476.

En raison de la politique de même origine, vous ne pouvez pas envoyer de requêtes AJAX à un autre serveur que le serveur sur lequel le script JS est hébergé.

Bien que vous puissiez désactiver cette fonction de sécurité, il n'est pas recommandé de la désactiver, sauf si vous gardez à l'esprit que n'importe qui peut injecter un code Javascript dans votre page et lui faire envoyer des demandes, qui peuvent contenir des données sensibles comme les cookies d'authentification, à leur serveur .

1
user4535447user4535447 13 juil. 2015 à 10:16