我正在尝试使用Web服务从URL中提取ID号,以便可以将其用作select语句中where子句的参数,该select语句根据记录的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
。
最佳答案
获取当前的http请求,并使用RequestContext属性获取请求上下文-它具有当前的routing data。例如,
var id = HttpContext.Current.Request.RequestContext.RouteData.Values["id"];
如果是基于WCF的Web服务,请确保该服务参与ASP.NET管道(请参见ASP.NET Compatibility)
编辑:对不起,导致误导的答案-除非在路由引擎中注册了Web服务URL,否则上述方法将无法工作。但是,它可能无法解决您获取ID的问题-您正在使用哪种服务实现?您要发出GET请求还是POST请求?通常,Web服务处理程序(asmx)或WCF管道应将GET / POST参数转换为方法参数。发布您的Web服务代码以及如何调用它。
关于asp.net - 如何从.Net 4.0中的Web服务获取RouteData值,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/7511323/