我正在尝试使用Web服务从URL中提取id号,以便它可以用作select语句中where子句的参数,该语句根据记录的id号从数据库生成数据。然后将该数据传递回页面以填充jQuery模式弹出窗口中的元素。
使用静态ID号(ex: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服务添加新路由,但我不知道我会使用jQuery Ajax来调用它,因为webservice.asmx / webmethod语法。
现在我有网址:" ../ webservices / googlemaps.asmx / GetGoogleMap"在我的jQuery Ajax中,但这不是一个真正的URL。它只存在于某个地方的jQuery中,并且使用JavaScript调用服务的方式也不是真正的URL,它的webservice.webmethod()
在这种情况下是googlemaps.GetGoogleMap()
。
我会尝试为webservices/googlemaps.asmx/GetGoogleMap/postid
注册路线,但我怀疑它会起作用,因为GetGoogleMap
不是目录或querystring
。
答案 0 :(得分:6)
获取当前的http请求并使用RequestContext属性获取请求上下文 - 它具有当前routing data。例如,
var id = HttpContext.Current.Request.RequestContext.RouteData.Values["id"];
如果是基于WCF的Web服务,请确保该服务正在参与ASP.NET管道(请参阅ASP.NET Compatibility)
编辑:很抱歉误导性答案 - 除非在路由引擎中注册了网络服务网址,否则上述操作无效。但是,它可能无法解决您检索ID的问题 - 您使用的是哪种服务实现?你在发出GET请求或POST请求吗?通常,Web服务处理程序(asmx)或WCF管道应将GET / POST参数转换为方法参数。发布您的Web服务代码以及如何调用它。