Как получить значения RouteData из веб-службы в .Net 4.0 - PullRequest
2 голосов
/ 22 сентября 2011

Я пытаюсь извлечь номер идентификатора из URL-адреса с помощью веб-службы, чтобы его можно было использовать в качестве параметра для предложения where в операторе выбора, который создает данные из базы данных на основе идентификатора записи. Эти данные затем будут переданы обратно на страницу для заполнения элемента в модальной всплывающей вдове jQuery.

Все отлично работает со статическим идентификатором (например: string postid = "120"), но я не знаю, как получить номер идентификатора из URL. Я использую маршрутизацию в .Net 4, и метод доступа к маршрутизации на страницах не работает в веб-сервисе. На страницах я просто делаю что-то вроде var id = RouteData.Values["id"]; и это получает идентификатор, но когда я сделал это в веб-сервисе, я получил ошибку:

CS0120: ссылка на объект требуется для нестатического поля, метод или свойство 'System.Web.Routing.RouteData.Values.get'

Резюме:

У меня есть доступ к веб-сервису со страницы сведений, где я хочу получить RouteData для страницы, выполняющей запрос. Я хочу сделать это так же легко, как и на странице, используя RouteData.Values, что так же просто, как сейчас устаревший Request.Querystring.


Теперь я в замешательстве, потому что, хотя я мог бы легко добавить новый маршрут для веб-службы, я не знаю, я бы назвал это с помощью jQuery Ajax из-за синтаксиса webservice.asmx / webmethod.

Прямо сейчас у меня есть URL: «../webservices/googlemaps.asmx/GetGoogleMap» в моем jQuery Ajax, но это не настоящий URL. Он существует только где-то в jQuery, и способ вызова службы с использованием только JavaScript - это тоже не реальный URL, а webservice.webmethod(), который в этом случае будет googlemaps.GetGoogleMap().

Я попытаюсь зарегистрировать маршрут для webservices/googlemaps.asmx/GetGoogleMap/postid, но я сомневаюсь, что он будет работать, потому что GetGoogleMap не является каталогом или querystring.

1 Ответ

6 голосов
/ 22 сентября 2011

Получите текущий http-запрос и используйте RequestContext свойство, чтобы получить контекст запроса - он имеет текущие данные маршрутизации . Например,

var id = HttpContext.Current.Request.RequestContext.RouteData.Values["id"];

В случае веб-службы на основе WCF убедитесь, что служба участвует в конвейере ASP.NET (см. Совместимость ASP.NET )

РЕДАКТИРОВАТЬ : Извините за вводящий в заблуждение ответ - вышеупомянутое не будет работать, если в движке маршрутизации не зарегистрирован URL веб-сервиса Тем не менее, это может не решить вашу проблему получения идентификатора - какую реализацию службы вы используете? Вы делаете запрос GET или POST? Обычно обработчик веб-службы (asmx) или конвейер WCF должны преобразовывать параметры GET / POST в параметры метода. Опубликуйте код своего веб-сервиса и то, как вы его вызываете.

...