Как получить значения RouteData из веб-службы в.Net 4.0
Я пытаюсь извлечь номер идентификатора из URL-адреса с помощью веб-службы, чтобы его можно было использовать в качестве параметра для предложения where в операторе select, который создает данные из базы данных на основе номера идентификатора записи. Эти данные затем будут переданы обратно на страницу для заполнения элемента в модальной всплывающей вдове 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 ответ
Получите текущий http-запрос и используйте свойство RequestContext, чтобы получить контекст запроса - он содержит текущие данные маршрутизации. Например,
var id = HttpContext.Current.Request.RequestContext.RouteData.Values["id"];
В случае веб-службы на основе WCF убедитесь, что служба участвует в конвейере ASP.NET (см. Совместимость ASP.NET).
РЕДАКТИРОВАТЬ: Извините за вводящий в заблуждение ответ - выше не будет работать, если URL-адрес веб-службы не зарегистрирован в движке маршрутизации. Тем не менее, это может не решить вашу проблему получения идентификатора - какую реализацию сервиса вы используете? Вы делаете запрос GET или POST? Как правило, обработчик веб-службы (asmx) или конвейер WCF должны преобразовывать параметры GET/POST в параметры метода. Опубликуйте код своего веб-сервиса и то, как вы его вызываете.