【问题标题】:How Do I Get RouteData Values from a Web Service in .Net 4.0如何从 .Net 4.0 中的 Web 服务获取 RouteData 值
【发布时间】:2011-09-22 07:46:17
【问题描述】:

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

【问题讨论】:

  • 您可以控制网络服务?您能否提供一些服务的示例 url,以及它们的声明?
  • 正确格式化您的代码:选择代码的每一行,然后按ctrl-K 或工具栏上的{} 按钮

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


【解决方案1】:

获取当前的 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 参数转换为方法参数。发布您的网络服务代码以及如何调用它。

【讨论】:

  • @IAmLearnings,请参阅我的编辑。请发布您的网络服务代码以及您如何调用它(通过编辑问题)!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-02-02
  • 1970-01-01
  • 2011-03-09
  • 2023-03-21
  • 2010-09-08
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多