【问题标题】:How can I get web service method being called by HttpContext?如何让 HttpContext 调用 Web 服务方法?
【发布时间】:2012-03-21 10:30:13
【问题描述】:

我有 40 种不同的网络方法的网络服务。 我可以在我的 Web 服务中使用 HttpContext 获取请求发送的方法吗?

我需要它,因为我有所有方法都激活的抽象通用命令,并且我只能访问 HttpContext。

谢谢!

【问题讨论】:

    标签: c# web-services http httpcontext


    【解决方案1】:

    如果我理解正确您的问题,您可以使用HttpRequestPathInfo 属性:

    string methodName = HttpContext.Current.Request.PathInfo;
    

    字符串 methodName 将是带有斜杠前缀 (/) 的方法名称:"/MyWebMethod"

    【讨论】:

    • 谢谢,但它返回空字符串而不是方法名称
    • @DorCohen:您在客户端使用的 URL 看起来如何?喜欢someBase/MyWebService.asmx/MyWebMethod?您是否在web.config<system.webserver> 部分使用任何URL 映射模块?
    • 不只是:someBase/MyWebService.asmx
    • @DorCohen:您如何从 40 种不同的 Web 方法中指定一个您当前要调用的方法?在您的情况下,HttpContext.Current.Request.Path 看起来如何?
    • 现在可以了..我发送的参数也可以获取吗?
    【解决方案2】:

    你可能需要:

    HttpContext.Current
    

    但请确保您已打开 ASPX 兼容模式,否则您将无法访问该属性

    您也可以像这样将函数的名称保存到 Items 数组中:

    void myServiceMethod()
    {
      HttpContext.Current.Items["MethodName"] = "myServiceMethod";
      // ...
      // here comes your method implementation
    }
    

    然后你可以在任何地方阅读HttpContext.Current.Items["MethodName"]

    集合 HttpContext.Current.Items 仅对当前请求有效,因此您可以将其用作任何请求相关信息的存储。

    当请求被响应时,它就是垃圾。

    【讨论】:

    • 它只给我web服务asmx路径,而不是具体方法-dc.dc.com/AgentWS/AgentService.asmx
    • 那么您可以将方法名称保存到 HttpContext.Current.Items 作为方法实现中的第一件事。然后,您可以在当前请求范围内的任何位置读取名称。
    猜你喜欢
    • 1970-01-01
    • 2010-11-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-05-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多