136 votes

JSONP avec API Web ASP.NET

Je suis en train de travailler sur la création d'un nouvel ensemble de services en ASP.MVC MVC 4 à l'aide de l'API Web. Jusqu'à présent, c'est génial. J'ai créé le service et eu à le faire fonctionner, et maintenant je suis en train de le consommer à l'aide de JQuery. Je peux revenir à la chaîne JSON à l'aide de Fiddler, et il semble être ok, mais parce que le service existe sur un autre site, en essayant de l'appeler avec JQuery erreurs avec le "Pas Autorisé". Donc, c'est clairement un cas où j'ai besoin d'utiliser JSONP.

Je sais que le Web API est nouveau, mais j'espère que quelqu'un pourra m'aider.

Comment puis-je faire un appel à une API Web à l'aide de la méthode JSONP?

132voto

Brian McCord Points 2283

Après avoir posé cette question, j'ai enfin trouvé ce dont j'avais besoin, je suis donc d'y répondre.

J'ai couru à travers ce JsonpMediaTypeFormatter. Ajouter dans l' Application_Start globale de votre.asax en faisant ceci:

var config = GlobalConfiguration.Configuration;
config.Formatters.Insert(0, new JsonpMediaTypeFormatter());

et vous êtes bon pour aller avec un JQuery AJAX appel qui ressemble à ceci:

$.ajax({
    url: 'http://myurl.com',
    type: 'GET',
    dataType: 'jsonp',
    success: function (data) {
        alert(data.MyProperty);
    }
})

Il semble très bien fonctionner.

52voto

Peter Moberg Points 1281

Voici une version actualisée de la JsonpMediaTypeFormatter pour une utilisation avec WebAPI RC :

21voto

010227leo Points 81

Vous pouvez utiliser un ActionFilterAttribute comme ceci :

Puis placez-le sur votre action :

11voto

Justin Points 3172

Certainement la réponse de Brian est correcte, cependant si vous utilisez déjà le module de formatage de Json.Net, qui vous donne de jolie json dates et sérialisation plus rapide, alors vous ne pouvez pas juste ajouter un deuxième formateur pour jsonp, vous devez combiner les deux. C’est une bonne idée d’utiliser quand même, comme Scott Hanselman a dit que la version d’ASP.NET Web API va utiliser le sérialiseur Json.Net par défaut.

9voto

Paul G Points 1615

Mise en œuvre de Rick Strahl a mieux fonctionné pour moi avec RC.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X