为HTTP POST / GET请求启用ASP.NET ASMX Web服务


70

我想为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#编写的。

Answers:


52

尝试通过您的方法声明UseHttpGet。

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

1
在给定服务中的所有方法上都启用属性而不将属性放在每个属性上的情况如何?
JohnIdol 2011年

抱歉,但是似乎没有这样做的选择
tanathos 2011年

我想你可以装饰课。不确定thoght
Bart Calixto

2
嗨,您如何将参数传递给此方法?
Nitin S

44

实际上,我发现了一种有点古怪的方法。将协议添加到您的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)]Correct?
Naman Upadhyay,

@NamanUpadhyay最好只在代码后面使用[HttpGet][HttpPost]标记。但是我认为您没有理会他的意思-这些标签与您在任何地方获取或发布数据有关。他允许在web.config中从多个位置获取/发布数据。我只有一个数据点位置,所以我认为它是不必要的,但是他的注释/答案可以满足他的需求,如果其他地方有多个,则可能是准确的。有多个位置与您在代码隐藏中使用的标记无关,这完全取决于您是否要获取/发送(发布)数据。
vapcguy
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.