2012-01-25 16 views
10

Estoy desarrollando una aplicación donde se entregan HTML y fragmentos de JavaScript a diferentes clientes. Soy capaz de obtener los trozos de javascript html/añadiendo lo siguiente al archivo web.config:mensajes de dominios cruzados a la aplicación 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> 

Esto es trabajo grande para hacer GETS. El problema que estoy corriendo en está haciendo POST dominios usando 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.'); 
     } 
    }); 

voy a tener numerosos clientes que consumen mi aplicación (es de esperar). Pensé en usar un proxy, pero no tengo el control de los servidores del cliente, así que no puedo instalar un httpHandler para actuar como un proxy.

¿Alguna sugerencia sobre cómo puedo PUBLICAR datos json de diferentes clientes entre dominios a mi aplicación ASP.Net MVC?

Respuesta

5

Jugueteé con mi llamada AJAX y parece estar funcionando (comparar con la llamada AJAX arriba):

 $.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.'); 
     } 
    }); 

me retiran "contentType: 'application/json'" y "JSON.stringify (. ..) "llama y puedo publicar en el servidor.

No estoy seguro de cómo explicar por qué funciona. ¿Algunas ideas? ¿Hay algún problema de seguridad? Estoy haciendo esto todo en mi computadora portátil. Configuré 2 sitios web diferentes a través de IIS 7. ¿Esto marcará la diferencia?

0

tiene dos opciones, en el tipo de datos puede poner texto o jsonp en lugar de json. y si nos da un ejemplo de los datos que está enviando, esto será más fácil.

Saludos

1

Cuando haya especificado la propiedad crossdomain a "true", la propiedad tipoDatos vuelve como jsonp. Sin embargo, necesitará una forma de manejar este jsonp en el lado de MVC. Es posible que desee echar un vistazo a la siguiente post StackOverflow: ASP.net MVC returning JSONP

2

Internamente la respuesta JSONP (el tipo predeterminado de peticiones entre dominios) se capta mediante la inyección de una etiqueta <script>, lo que apunta a la URL. Por eso, solo el método GET es posible con JSONP. Se ignorarán otros métodos y volverán al GET.

0

Si tiene control sobre las bibliotecas JS que incluye, la mejor manera es utilizar una de las muchas bibliotecas de comunicación entre dominios. El cliente (la aplicación MVC en su caso) deberá tenerlo configurado para aceptar tales solicitudes; en la mayoría de los casos, significa tener la misma capacidad de aceptación en el lado.

El mejor que encontré hasta ahora es EasyXDM. No hay muchas limitaciones y se ajusta a las capacidades del navegador. Pero debes tenerlo en ambas aplicaciones que se comuniquen entre sí.

Cuestiones relacionadas