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

时间:2011-09-22 07:46:18

标签: asp.net web-services routing query-string routedata

我正在尝试使用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

1 个答案:

答案 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服务代码以及如何调用它。