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