如何从.Net 4.0中的Web服务获取RouteData值

IAm*_*ngs 2 asp.net routing web-services routedata query-string

我试图使用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服务添加新路由,但我不知道因为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.

Vin*_*ayC 6

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

var id = HttpContext.Current.Request.RequestContext.RouteData.Values["id"];
Run Code Online (Sandbox Code Playgroud)

对于基于WCF的Web服务,请确保该服务正在参与ASP.NET管道(请参阅ASP.NET兼容性)

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