2012-01-25 3 views
10

Я разрабатываю приложение, где куки HTML и javascript доставляются до разных клиентов. Я в состоянии получить HTML/JavaScript ломти, добавив следующую строку в файл конфигурации веб-:перекрестные сообщения домена в приложение 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> 

Это работает отлично подходит для ведения GETS. Проблема я бегу в делает сообщения междоменное с помощью 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.'); 
     } 
    }); 

у меня будет много клиентов, потребляющих мое приложение (я надеюсь). Я думал об использовании прокси-сервера, но у меня нет контроля над клиентскими серверами, поэтому я не могу установить httpHandler для работы в качестве прокси-сервера.

Любые предложения о том, как я могу POST json-данных от разных клиентов переходить к моему ASP.Net MVC-приложению?

ответ

5

Я возился с моим АЯКС вызова и, кажется, работает (сравните с вызовом АЯКС выше):

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

Я удалил «CONTENTTYPE:„приложения/JSON“» и «JSON.stringify (. ..) ", и я могу отправлять сообщения на сервер.

Я не уверен, как объяснить, почему он работает. Есть идеи? Есть ли проблемы с безопасностью? Я делаю все это на своем ноутбуке. Я создал 2 разных веб-сайта через IIS 7. Будет ли это иметь значение?

0

у вас есть два варианта, в dataType вы можете поместить текст или jsonp вместо json. и если вы дадите нам и пример данных, которые вы отправляете, это будет проще.

С уважением

1

Когда вы определили свойство crossDomain «истина», то свойство DATATYPE получает значение, как JSONP. Вам понадобится способ справиться с этим jsonp, но на стороне MVC. Вы можете захотеть взглянуть на следующий StackOverflow сообщение: ASP.net MVC returning JSONP

2

Внутренне ответ JSONP (тип по умолчанию для запросов между доменами) извлекается путем введения <script> тег, который указывает на URL. Из-за этого только GET способ можно использовать JSONP. Другие методы будут игнорироваться и возвращаться к GET.

0

Если у вас есть контроль над тем, какие библиотеки JS вы включаете, лучший способ - использовать одну из многих междоменных коммуникационных библиотек. Клиент (приложение MVC в вашем случае) должен будет настроить его для приема таких запросов, в большинстве случаев это означает, что у него есть одна и та же lib на принимающей стороне.

Самый лучший, который я нашел до сих пор, это EasyXDM. Не так много ограничений и настраивается на возможности браузера. Но вы должны иметь его в обоих приложениях, которые разговаривают друг с другом.

Смежные вопросы