2012-01-25 20 views
10

Sto sviluppando un'applicazione in cui i pezzi HTML e javascript vengono consegnati a clienti diversi. Sono in grado di ottenere il codice html/javascript pezzi aggiungendo quanto segue al file di configurazione web:post cross domain all'app ASP.Net MVC

<system.webServer> 
<modules runAllManagedModulesForAllRequests="true" /> 
    <httpProtocol> 
     <customHeaders> 
      <add name="Access-Control-Allow-Origin" value="*" /> 
      <add name="Access-Control-Allow-Headers" value="Content-Type" /> 
      <add name="Access-Control-Allow-Methods" value="POST, GET, OPTIONS" /> 
     </customHeaders> 
    </httpProtocol> 

Questo sta lavorando molto per fare GETS. Il problema che sto funzionando in sta facendo POST dominio croce utilizzando jQuery:

 $.ajax(
    { 
     type: 'POST', 
     url: url, 
     crossDomain: true, 
     data: JSON.stringify(data), 
     dataType: 'json', 
     contentType: 'application/json', 
     success: function(responseData, textStatus, jqXHR) 
     { 
      alert('Success'); 
     }, 
     error: function (responseData, textStatus, errorThrown) 
     { 
      alert('POST failed.'); 
     } 
    }); 

avrò numerosi clienti che consumano la mia app (si spera). Ho pensato di utilizzare un proxy, ma non ho il controllo dei server client, quindi non sono in grado di installare un httpHandler per fungere da proxy.

Qualche suggerimento su come posso inviare dati JSON di diversi client su domini alla mia app ASP.Net MVC?

risposta

5

I giocherellava con la mia chiamata AJAX e sembra di essere al lavoro (confrontare alla chiamata ajax sopra):

 $.ajax(
    { 
     type: 'POST', 
     url: url, 
     crossDomain: true, 
     data: data, 
     dataType: 'json', 
     success: function(responseData, textStatus, jqXHR) 
     { 
      alert('success'); 
     }, 
     error: function (responseData, textStatus, errorThrown) 
     { 
      alert('POST failed.'); 
     } 
    }); 

ho tolto "contentType: 'application/json'" e "JSON.stringify (. ..) "chiama e sono in grado di postare sul server.

Non so come spiegare perché funziona. Qualche idea? Ci sono problemi di sicurezza? Sto facendo tutto questo sul mio laptop. Ho creato 2 diversi siti Web tramite IIS 7. Questo farà la differenza?

0

hai due opzioni, nel dataType puoi inserire testo o jsonp invece di json. e se ci fornisci un esempio dei dati che stai inviando, sarà più facile.

saluti

1

Quando specificato la proprietà crossdomain su "true", la proprietà dataType viene impostata come jsonp. Avrai comunque bisogno di un modo per gestire questo jsonp sul lato MVC. Si potrebbe voler dare un'occhiata al seguente post StackOverflow: ASP.net MVC returning JSONP

2

Internamente la risposta JSONP (il tipo predefinito per le richieste cross-domain) viene prelevata iniettando un tag <script>, che punta alla URL. Per questo motivo, con JSONP è possibile solo il metodo GET. Altri metodi saranno ignorati e torneranno a GET.

0

Se si ha il controllo su quali librerie JS includere, il modo migliore è utilizzare una delle molte librerie di comunicazione tra domini. Il client (l'app MVC nel tuo caso) dovrà configurarlo per accettare tali richieste, nella maggior parte dei casi significa avere la stessa lib sul lato di accettazione.

Il migliore che ho trovato finora è EasyXDM. Non molte limitazioni e si adatta alle funzionalità del browser. Ma devi averlo su entrambe le app che parlano tra loro.

Problemi correlati