启用ASP.NET ASMX Web服务以处理HTTP POST / GET请求

71

我想要启用一个ASP.NET经典版(ASMX)Web服务来处理HTTP POST和GET请求。我意识到这可以通过在机器或应用程序级别添加...来实现。

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

我想将HTTP POST和GET请求的启用范围限制在每个Web服务或Web方法级别,而不是每个应用程序或计算机级别,这些设置是否可以添加到machine.config或web.config文件中?

我的Web服务使用C#编写,使用.net 3.5sp1。

2个回答

53

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

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

1
如何在不为每个方法添加属性的情况下,为给定服务中的所有方法启用它? - JohnIdol
抱歉,但似乎没有这样的选项。 - tanathos
我认为你可以装饰这个类。不过我不确定。 - Bart Calixto
2
嗨,你是如何获取传递给这个方法的参数的? - Nitin Sawant

46

实际上,我发现了一种有些古怪的方法来做到这一点。在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直接位于主要的<configuration>节点内。 - vapcguy
2
@vapcguy 这取决于你想要实现什么。如果你有多个服务,但只有一个需要支持GET,那么这将允许它只针对该服务。如果你不在意它是否适用于所有服务,那么你可以将其放在通用的system.web部分中。 - ahwm
@ahwm 如果我们想要使用HttpPost方法,那么我们需要将其写成[ScriptMethod(UseHttpGet = false)],对吗? - Naman Upadhyay
最好在代码后端中只使用 [HttpGet][HttpPost] 标签。但我认为你没有理解他的意思——这些标签与您是否从任何地方获取或发布数据有关。他允许从多个位置获取/发布数据,而我只有一个数据点位置,所以我觉得这是不必要的,但他的评论/答案对于他的需求和其他人(如果他们有多个)可能是准确的。拥有多个位置与您在代码后端中使用的标签无关——这仅取决于您是否获取/发送(发布)数据。 - vapcguy

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接