【问题标题】:Enable ASP.NET ASMX web service for HTTP POST / GET requests为 HTTP POST / GET 请求启用 ASP.NET ASMX Web 服务
【发布时间】:2010-10-11 18:13:18
【问题描述】:

我想为 HTTP POST 和 GET 请求启用 ASP.NET 经典 (ASMX) Web 服务。我意识到这可以通过添加...在机器或应用程序级别上完成...

<webServices>
    <protocols>
        <add name="HttpGet"/>
        <add name="HttpPost"/>
    </protocols>
</webServices>

.. 到 machine.config 或 web.config。我的问题是可以按 Web 服务或 Web 方法级别而不是按应用程序或机器启用 HTTP POST 和 GET 请求吗?

我的 Web 服务是使用 net 3.5sp1 用 c# 编写的。

【问题讨论】:

    标签: asp.net web-services asmx


    【解决方案1】:

    尝试在你的方法上声明 UseHttpGet。

    [ScriptMethod(UseHttpGet = true)]
    public string HelloWorld()
    {
        return "Hello World";
    }
    

    【讨论】:

    • 如何为给定服务中的所有方法启用它而不在每个方法上添加属性?
    • 抱歉,好像没有办法这样做
    • 我认为你可以装饰班级。不知道
    • 您好,您是如何将参数传递给此方法的?
    【解决方案2】:

    实际上,我找到了一种有点古怪的方法来做到这一点。 将协议添加到您的 web.config,但在 location 元素中。将 webservice 位置指定为路径属性,如下所示:

    <location path="YourWebservice.asmx">
      <system.web>
        <webServices>
          <protocols>
            <add name="HttpGet"/>
            <add name="HttpPost"/>
          </protocols>
        </webServices>
      </system.web>
    </location>
    

    【讨论】:

    • 只是,您不需要location 部分。 system.web 直接存在于主 &lt;configuration&gt; 节点内。
    • @vapcguy 这取决于您要完成的工作。如果您有多项服务,但只有一项需要支持GET,这将只支持一项。如果您不在乎它是否适用于所有这些,那么是的,您可以将其放在一般 system.web 部分
    • @ahwm 如果我们要使用HttpPost方法那么我们需要写成[ScriptMethod(UseHttpGet = false)]正确吗??
    • @NamanUpadhyay 最好只在代码隐藏中使用[HttpGet][HttpPost] 标签。但我认为你错过了他的观点——这些标签与你是否在任何地方获取或发布数据有关。他允许从多个位置获取/发布 web.config 中的数据。我只有一个数据点位置,所以我觉得没有必要,但他的评论/答案对于他的需要是准确的,如果他们有多个,也许其他人的需要。拥有多个位置与您在代码隐藏中使用的标签无关 - 这完全取决于您是否正在获取/发送(发布)数据。
    猜你喜欢
    • 2010-10-15
    • 2011-03-05
    • 2011-02-07
    • 2017-10-18
    • 1970-01-01
    • 2019-09-04
    • 1970-01-01
    • 2013-06-10
    • 2013-10-03
    相关资源
    最近更新 更多