2009-08-14 87 views
1

不幸的是,我正在使用ASP.NET Web Forms构建的(遗留)项目上做一些工作。我无法将它迁移到ASP.NET MVC(所以请不要将其作为答案)。是否可以将某些ASMX Web服务方法仅限制为GET或POST?

我想创建一个API来公开我们的一些数据。所以,我去了一个头,做了一个网络服务。很简单的东西。但是,对于前几种方法,我希望仅将它们公开为HTTP-GET。对于我的最后一种方法,我希望仅将它公开为HTTP-POST。

我很习惯使用ASP.NET MVC,这就是为什么我真的很喜欢这种REST风格的编程方式,但我不知道如何使用我的Web服务来做到这一点?

我正在使用URL重写器,以便处理'REST'消耗api(这是跛脚,但它的工作原理)。

那么,有没有办法阻止一个Web服务只接受HTTP动词?

+0

这听起来不像我REST。 URL重写与REST没有任何关系,HTTP动词也没有。如果不正确,请删除[rest]标签。 – aehlke 2009-08-14 14:18:23

回答

4

添加方法声明之上以下几点:

[ScriptMethod(UseHttpGet = false)] 

这迫使方法只有POST响应。如果您希望方法响应GET,请设置为true。这里需要注意的是,您需要使用ASP.NET 3.5或ASP.NET AJAX Extensions for ASP.NET 2.0。你可以阅读更多关于这个here

+0

如果我将它设置为TRUE,是否表示POST不可用? – 2009-08-14 05:23:19

+0

这将整个服务限制为POST,而不仅仅是我认为他所要求的单一方法。 – 2009-08-14 05:46:43

+0

可以为每个方法设置和更改ScriptMethod属性,而不仅仅是整个类。 – devilaether 2009-08-14 15:05:40

-3

我很确定.net Web服务类只接受发布的变量。

+0

不接受,它接受GET,POST和SOAP(编辑:即使SOAP不是HTTP-Verb)。 – 2009-08-14 05:00:57

1

您可以enable GET in the web.config,使用:

<configuration> 
    <system.web> 
    <webServices> 
     <protocols> 
     <add name="HttpGet"/> 
     <add name="HttpPost"/> 
     </protocols> 
    </webServices> 
    </system.web> 
</configuration> 

要限制一个方法来POST,可以在运行时测试HttpContext.Current.Request.HttpMethod。

+0

是的 - 我知道的。但是,我怎么能限制一个单一的方法..如果GET和POST都启用?该配置设置用于_all_ web方法.... – 2009-08-14 05:03:13

+0

您可以在运行时测试HttpMethod属性。更新了答案。 – 2009-08-14 05:10:35