междоменные сообщения в приложение ASP.Net MVC - PullRequest
10 голосов
/ 26 января 2012

Я занимаюсь разработкой приложения, в котором фрагменты HTML и javascript доставляются различным клиентам.Я могу получить фрагменты html / javascript, добавив следующее в файл веб-конфигурации:

  <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.Проблема, с которой я сталкиваюсь, заключается в создании междоменного домена POST с использованием 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 ]

6 голосов
/ 26 января 2012

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

        $.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: 'application / json'" и "JSON.stringify (...)" и могу отправлять сообщения на сервер.

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

2 голосов
/ 22 марта 2012

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

1 голос
/ 21 марта 2012

Когда вы указали для свойства crossDomain значение "true", свойство dataType будет установлено как jsonp. Однако вам понадобится способ обработать этот jsonp на стороне MVC. Возможно, вы захотите взглянуть на следующую запись stackoverflow: ASP.net MVC возвращает JSONP

0 голосов
/ 22 марта 2012

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

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

0 голосов
/ 24 февраля 2012

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

С уважением

...