разрешить междоменные запросы к ASP.NET ScriptService - PullRequest
0 голосов
/ 19 июля 2011

У меня есть ASP.NET Webservice и работает с использованием атрибута [ScriptService]. Из того, что я прочитал из этой статьи:

http://weblogs.asp.net/scottgu/archive/2007/04/04/json-hijacking-and-how-asp-net-ajax-1-0-mitigates-these-attacks.aspx

ASP.NET по умолчанию не разрешает запросы JSONP (внедренные в DOM для отклонения кросс-доменных запросов. Это делается путем принятия 2 мер:

1) принимать только запросы POST (инъекция скрипта через GET всегда выполняется) 2) запретить соединения, отправляющие заголовок HTTP типа содержимого, отличного от «Content-type: application / json» (который браузеры не будут отправлять).

Я знаком с междоменными проблемами и знаю, что такое JSONP, и я полностью понимаю, почему ASP.NET по умолчанию ограничен таким образом.

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

Я уже рассмотрел шаг (1), чтобы разрешить запросы через GET, изменив атрибут ScriptMethod следующим образом: [ScriptMethod (UseHttpGet = true)]. Я проверил с помощью jQuery, GET-запросы теперь работают (на одном домене). Но как добраться до точки (2)?

Я знаю о заголовках Allow-Origin- *, которые поддерживаются некоторыми браузерами, но на самом деле это еще не стандарт, и я не хочу заставлять своих пользователей / клиентов изменять свои заголовки HTTP для использования моего веб-сервиса.

Подводя итог: мне нужна хорошая практика для включения междоменных запросов для ScriptingService для общедоступных веб-сервисов через JSON. Я имею в виду, что ДОЛЖЕН быть способ сделать общедоступным веб-сервис, то есть то, чем занимается большинство веб-сервисов?

Ответы [ 2 ]

0 голосов
/ 19 июля 2011

Функция jQuery ajax () имеет свойство 'crossDomain'.

Вставлено из jQuery.ajax ()

crossDomain (добавлено 1.5) По умолчанию: falseдля запросов в одном домене, true для запросов в нескольких доменах. Если вы хотите форсировать запрос crossDomain (например, JSONP) для одного и того же домена, установите для свойства crossDomain значение true.Это позволяет, например, перенаправление на стороне сервера в другой домен

0 голосов
/ 19 июля 2011

Использование устаревших сервисов ASMX для чего-то подобного кажется безнадежным делом. Попробуйте WCF , который благодаря своей расширяемой природе очень легко может быть с поддержкой JSONP .Поэтому, если вы запрашиваете передовой опыт, WCF - это технология, которую вы должны создавать веб-сервисы на платформе .NET.

Или если вы действительно не можете позволить себе переход на .NET 3.5 в тот момент, когда вы можететакже написать собственный обработчик http (.ashx) для выполнения этой работы.

...