Вызов веб-сервисов REST со классической страницы asp - PullRequest
26 голосов
/ 14 августа 2008

Я хотел бы начать переносить наши бизнес-уровни приложений в набор веб-сервисов REST. Тем не менее, большая часть нашей интрасети была построена с использованием Classic ASP, и большинство разработчиков, где я работаю, продолжают программировать на Classic ASP. В идеале, для того, чтобы они могли воспользоваться преимуществами уникального набора веб-API, его нужно было бы вызывать со страниц Classic ASP.

Понятия не имею, как это сделать.

Ответы [ 7 ]

28 голосов
/ 14 августа 2008

Вы можете использовать комбинацию JQuery с вызовами JSON, чтобы использовать REST-сервисы от клиента

или

если вам нужно взаимодействовать со службами REST из уровня ASP, вы можете использовать

MSXML2.ServerXMLHTTP

как:

Set HttpReq = Server.CreateObject("MSXML2.ServerXMLHTTP")
HttpReq.open "GET", "Rest_URI", False
HttpReq.send
9 голосов
/ 14 августа 2008

@ KP

На самом деле вы должны использовать MSXML2.ServerXMLHTTP из ASP / серверных приложений. XMLHTTP следует использовать только на стороне клиента, поскольку он использует WinInet, который не поддерживается для использования в приложениях сервера / службы.

См. http://support.microsoft.com/kb/290761, вопросы 3, 4 и 5 и

http://support.microsoft.com/kb/238425/.

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

6 голосов
/ 14 августа 2008
3 голосов
/ 12 января 2011

Некоторые ответы, представленные здесь, показывают, как ClassicASP может использоваться для использования веб-сервисов и вызовов REST.

На мой взгляд, более подходящим решением может быть для ClassicASP просто обслуживать данные в форматах REST. Пусть ваш клиентский код на основе браузера обрабатывает 'mashup', если это возможно. Вы должны быть в состоянии сделать это без включения каких-либо других компонентов ASP.

Итак, вот как я бы смоделировал блестящую новую поддержку REST в ClassicASP:

  1. предоставляет одну веб-страницу ASP, которая действует как посадочная площадка
  2. Целевая панель будет обрабатывать два параметра: глагол и URL, а также набор содержимого формы
  3. Используйте какой-нибудь блок переключателей, проверьте URL и направьте глагол (и содержимое формы) соответствующему обработчику
  4. Затем обработчик будет обрабатывать глагол (PUT / POST / GET / DELETE) вместе с содержимым формы, возвращая код успеха / ошибки плюс данные в зависимости от ситуации.
  5. Ваша посадочная панель проверит код успеха / сбоя и вернет соответствующий HTTP-статус плюс все возвращенные данные

Вам будет полезен класс поддержки, который декодирует / кодирует данные формы из / в JSON, поскольку это упростит вашу реализацию на стороне клиента (и потенциально упростит объем передаваемых данных). Смотрите разговор здесь на Какие-нибудь хорошие библиотеки для анализа JSON в Classic ASP?

Наконец, на стороне клиента, предоставьте метод, который принимает глагол, URL и полезную нагрузку данных. В краткосрочной перспективе метод сопоставит параметры и направит их на посадочную площадку. В более долгосрочной перспективе (после того, как вы переключитесь с Classic ASP) ваш метод может отправить данные на «реальный» URL.

Удачи ...

1 голос
/ 22 ноября 2017

Другим возможным решением является написание .NET DLL, которая выполняет вызовы и возвращает результаты (возможно, оберните что-то вроде RESTSharp - предоставьте ему простой API, настроенный под ваши потребности). Затем вы регистрируете DLL как COM DLL и используете ее в своем коде ASP через метод CreateObject.

Я сделал это для таких вещей, как создание подписанных JWT, соление и хэширование паролей. Это работает хорошо (пока вы работаете как сумасшедший, чтобы переписать ASP).

0 голосов
/ 13 сентября 2008

Другой возможностью является использование COM-объекта WinHttp Использование COM-объекта WinHttpRequest .

WinHttp был разработан для использования из кода сервера.

0 голосов
/ 14 августа 2008

Все, что вам нужно, это HTTP-клиент. В .Net WebRequest работает хорошо. Для классического ASP вам понадобится определенный компонент, такой как этот .

...