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

标签 asp.net web-services routes query-string routedata

我正在尝试使用 Web 服务从 URL 中提取 ID 号,以便可以将其用作 select 语句中 where 子句的参数,该语句根据记录的 ID 号从数据库生成数据。然后,该数据将被传回页面以填充 jQuery 模式弹出窗口中的元素。

使用静态 ID 号(例如:string postid = "120")一切正常,但我不知道如何从 URL 获取 ID 号。我在 .Net 4 中使用路由,并且在页面中访问路由的方法在 Web 服务中不起作用。在页面中,我只是执行诸如 var id = RouteData.Values["id"]; 之类的操作并获取 id,但是当我在 Web 服务中执行此操作时,出现错误:

CS0120: An object reference is required for the non-static field, method, or property 'System.Web.Routing.RouteData.Values.get'

摘要:

我从详细信息页面访问网络服务,我想在其中获取发出请求的页面的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 不是目录或 查询字符串

最佳答案

获取当前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/

相关文章:

jquery - visual studio 2010 jquery 和 ScriptManager 导致错误

c# - ASP 单选按钮 oncheckedchange 未触发

ios - 将 xcode 更新到 7.2 后,我的应用程序无法连接到 Web 服务

ruby-on-rails - 将变量插入路线 - map.resources :posts, :as => X - is this possible?

ASP.NET 返回 HTTP 500 而不是 404

asp.net - 使用css设置kendoui样式文本框的宽度

c# - MVC 5 项目和 Web Api 项目的区别

java - 从 wsdl url 创建 Web 服务客户端

django - 将 Django 连接到 Web 服务而不是数据库

ruby-on-rails - 带有智能重定向的 StackOverflow 风格路由