2

我正在尝试使用 Web 服务从 URL 中提取 id 号,以便它可以用作 select 语句中 where 子句的参数,该语句根据记录的 id 号从数据库中生成数据。然后,该数据将被传递回页面以填充 jQuery 模式弹出窗口中的元素。

使用静态 ID 号(例如:)一切正常string postid = "120",但我不知道如何从 URL 中获取 ID 号。我在 .Net 4 中使用路由,并且在页面中访问路由的方法在 Web 服务中不起作用。在页面中,我只是做类似这样的事情var id = RouteData.Values["id"];并获取 id,但是当我在 Web 服务中这样做时,我得到了一个错误:

CS0120:非静态字段、方法或属性需要对象引用'System.Web.Routing.RouteData.Values.get'

概括:

我从一个详细信息页面访问了 Web 服务,我想在其中获取RouteData发出请求的页面。我想在页面上尽可能轻松地做到这一点,使用RouteData.Values它就像现在过时的Request.Querystring.


现在我更困惑了,因为虽然我可以轻松地为 Web 服务添加一条新路由,但我不知道我会因为 webservice.asmx/webmethod 语法而使用 jQuery Ajax 来调用它。

现在我的 jQuery Ajax 中有 URL:“../webservices/googlemaps.asmx/GetGoogleMap”,但这不是真正的 URL。它只存在于 jQuery 中的某个地方,仅使用 JavaScript 调用服务的方式也不是真正的 URL,webservice.webmethod()在这种情况下它是googlemaps.GetGoogleMap().

我将尝试为 注册路由webservices/googlemaps.asmx/GetGoogleMap/postid,但我怀疑它是否会起作用,因为GetGoogleMap它不是目录或querystring.

4

1 回答 1

7

获取当前 http 请求并使用RequestContext属性获取请求上下文 - 它具有当前路由数据。例如,

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

如果是基于 WCF 的 Web 服务,请确保该服务参与 ASP.NET 管道(请参阅ASP.NET 兼容性

编辑:很抱歉误导性的回答 - 除非在路由引擎中注册了 Web 服务 url,否则上述内容将不起作用。但是,它可能无法解决您检索 id 的问题 - 您使用的是哪种服务实现?您是在发出 GET 请求还是 POST 请求?通常,Web 服务处理程序 (asmx) 或 WCF 管道应将 GET/POST 参数转换为方法参数。发布您的 Web 服务代码以及如何调用它。

于 2011-09-22T08:42:17.523 回答