2009-08-14 72 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