Question

Je développe un langage Javascript côté client qui utilise des services Web JSON sur un domaine différent. J'ai lu que certains navigateurs n'autorisaient pas les scripts entre domaines et que je devrais créer un proxy sur mon serveur local pour servir les données.

Quelqu'un peut-il m'indiquer un exemple simple de la procédure à suivre dans ASP.Net?

Était-ce utile?

La solution

Vous pourrez peut-être éviter un proxy en utilisant une technique telle que JSONP . En supposant que le service Web avec lequel vous parlez prend en charge JSONP (par exemple, Flickr ou Twitter offrent tous deux une API JSONP) ou que vous avez le contrôle sur les données renvoyées par le service Web, vous pouvez envoyer des données JSON entre domaines à l'aide d'une bibliothèque dotée de JSONP. .

Par exemple, dans jQuery, vous pouvez effectuer un appel JSON distant:

jQuery.getJSON("http://www.someothersite.com/webservice?callback=?", function(result)
{
    doStuffWithResult(result);
});

Comme l'appel est destiné à un autre domaine, jQuery utilise automatiquement une astuce pour passer un appel entre domaines. jQuery remplacera automatiquement le? dans l'URL avec un nom de fonction de rappel que le service Web peut utiliser pour formater les données JSON renvoyées.

Si vous contrôlez le service Web, vous pouvez gérer la demande JSONP en récupérant le paramètre de demande appelé "rappel". qui sera défini sur le nom de la fonction de rappel que vous devez utiliser. La fonction de rappel prend un paramètre, qui correspond aux données JSON que vous souhaitez renvoyer. Ainsi, si le paramètre de rappel est défini sur "jsonp2342342", vous souhaitez que le service Web réponde comme suit:

jsonp2342342({key: value, key2: value});

Si le service Web que vous utilisez déjà prend en charge JSONP, vous n'avez pas à vous soucier de la mise en forme vous-même.

Autres conseils

En règle générale, le proxy s'exécute sur votre serveur Web (le plus probablement IIS dans votre cas) et "transmet" les demandes à un autre serveur appartenant à un domaine différent.

Voici un exemple d'un exemple implémenté dans C # .NET

Proxy AJAX rapide et en flux continu

Vous pouvez écrire une simple page .NET pour récupérer la page distante et l'afficher sur votre site:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Net;
using System.IO;

namespace Proxy
{
    public partial class _Proxy : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {
            string proxyURL = string.Empty;
            try
            {
                proxyURL = HttpUtility.UrlDecode(Request.QueryString["u"].ToString());
            }
            catch { }

            if (proxyURL != string.Empty)
            {
                HttpWebRequest request = (HttpWebRequest)WebRequest.Create(proxyURL);
                request.Method = "GET";
                HttpWebResponse response = (HttpWebResponse)request.GetResponse();

                if (response.StatusCode.ToString().ToLower() == "ok")
                {
                    string contentType = response.ContentType;
                    Stream content = response.GetResponseStream();
                    StreamReader contentReader = new StreamReader(content);
                    Response.ContentType = contentType;
                    Response.Write(contentReader.ReadToEnd());
                }
            }
        }
    }
}

Voir mon post à ce sujet: http://www.johnchapman.name/aspnet-proxy-page-cross-domain-requests-from-ajax-and-javascript/

Aucun navigateur ne permet le script interdomaine. Bien que w3c ait laissé de l'espace pour cela dans sa recommandation sur l'objet xmlHTTPRequest, nous devons encore attendre un certain temps avant de le mettre en œuvre de manière sécurisée. chemin ...

Je donnerai une version pseudocode aux personnes cherchant une réponse générale à la question.

SomeAjaxAbstraction.Request('proxyScript', {
    parameters: {
        address: 'http://somewhere.com/someapi?some=query'
    }
});

Puis en proxyScript:

var address = GET['address'];
if(ValidUrl(address) && ConnectionAllowed(address)) {
    // Validating address and whitelisting services is an exercise to the reader
    var response = SomeHttpGetFunction(address);
    echo XssAndBadStuffFilter(response);
} else {
    // Handle errors
}
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top