Реализовать restful url в .net, где сервис реализован с использованием IHTTPHandler - PullRequest
1 голос
/ 18 января 2011

Я хочу реализовать полноценный сервис в ASP.NET.Я хочу, чтобы он был совместим с .Net 2.0 и IIS 5+.Я вынужден не использовать ASP.NET MVC или REST Starter Kit.Читая в Интернете, я узнал, что это можно реализовать с помощью HTTPHandlers.Проблема в том, что запрос поступит как POST-запрос.И я хочу, чтобы URL был таким:

http://abc.com/MyService/MyMethod1/ и http://abc.com/MyService/MyMethod2/

Есть ли какие-нибудь обходные пути для этого?

Ответы [ 3 ]

1 голос
/ 18 января 2011

Если вы можете разрешить ограничение только IIS 7.0 и выше, вы можете использовать URL Rewrite http://www.iis.net/download/URLRewrite, чтобы сделать это довольно легко.

Могу я спросить, почему вам требуется поддержка IIS 5+?Это 11-летняя технология, которая, как мы надеемся, люди покинут эти платформы в пользу более свежих версий.Также имейте в виду, что поддержка некоторых из этих платформ заканчивается довольно скоро.

Если дело касается разработчиков под управлением Windows XP, я бы отметил, что IIS Express включает в себя функциональность версии 7.5+ и доступна для всех платформ Windows XP ивыше.

1 голос
/ 19 января 2011

Ваш лучший вариант - использовать перезапись URL.Это нетривиально в IIS5.Известные мне методы:

Метод 1 - фильтр ISAPI

Это низкоуровневые модули, которые позволяют манипулировать входящим запросом.Программирование одного из них сложно и сложно отладить.Если вы пойдете по этому пути, вам лучше использовать тот, который уже построен, как ISAPI_Rewrite .

Метод 2 - IHttpModule

Этоуправляемые модули ASP.Net, которые легко добавлять / удалять из вашего приложения.Опять же, вам лучше использовать готовый компонент, такой как UrlRewriter.NET .Проблема с использованием одного из них (как упоминает BrainLy) заключается в том, что необходимо настроить IIS 5 для сопоставления всех входящих запросов в ASP.Net следующим образом ( ссылка ):

  1. Откройте IIS и перейдите на вкладку «Домашний каталог»
  2. Выберите «Конфигурация»
  3. Нажмите «Добавить» и введите «C: \ WINNT \ Microsoft.NET \ Framework \ v2.0.50727 \ aspnet_isapi.dll ”в поле Исполняемый файл.Для расширения файла введите «. *».Наконец, убедитесь, что «Проверить, что файл существует» не отмечен.

Одна интересная вещь, которую следует отметить, - это то, что ASP.Net сам по себе является модулем ISAPI:)

После того, как выИмея возможность манипулировать URL-адресами с помощью одного из этих инструментов, вы можете легко переписать URL-адреса RESTful, которые будут обрабатываться вашей страницей default.aspx (или любым другим обработчиком, который вы выберете).

0 голосов
/ 18 января 2011

Я думаю, что это будет трудно сделать, потому что IIS 5 не позволит вам обрабатывать расширения файлов, не относящиеся к ASP.NET, без какой-либо дополнительной настройки в IIS.Это означает, что вы ограничены URL-адресами, заканчивающимися на .aspx и т. Д. Для обработки URL-адресов, подобных тем, что приведены в ваших примерах, необходимо сопоставить ASP.NET для обработки всех URL-адресов в IIS, реализовать какой-либо тип перезаписи URL или ввести какое-то хакерское перенаправление 404..

Как только вы установили правильное сопоставление, вы можете подключить IHttpHandler, но вам придется самостоятельно проанализировать входящий запрос, чтобы выяснить, что это / MyService / MyMethod1 / и для / MyService / MyMethod2/.Если ваши методы просты, то это легко сделать с помощью регулярного выражения.

Вы должны начать с простого обработчика, такого как this one.

...