Перекрестные сообщения домена в приложение ASP.Net MVC

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

  <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-приложению?

Ответ 1

Я возился с моим вызовом 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

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

Ответ 3

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

Ответ 4

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

Привет

Ответ 5

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

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