Как получить значения 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 в параметры метода. Опубликуйте код своего веб-сервиса и то, как вы его вызываете.

Другие вопросы по тегам