2012-10-28 42 views
1

我正在嘗試使Web服務能夠以不同方式響應HttpGet和HttpPost請求。ASP.NET Web服務 - 將方法限制爲HttpGet或HttpPost

我已經啓用HTTPGET本:

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

我開了2個功能,一個應該爲HttpPost請求和其他被解僱 - 對HTTPGET:

[WebMethod] 
[HttpPost] 
[ActionName("HelloWorld")] 
public string HelloWorldPost() 
{ 
    return "Hello POST World"; 
} 

[WebMethod] 
[HttpGet] 
public string HelloWorld() 
{ 
    return "Hello GET World"; 
} 

但是似乎HttpGet,HttpPost和ActionName完全被忽略。所有對HelloWorld的請求(post或get)都會觸發第二個函數。我需要以其他方式做這個嗎?我也試圖限制這個功能:

[ScriptMethod(UseHttpGet = false)] 

但這也沒有什麼區別。

+0

你使用的是asp.net webapi嗎? –

+0

我猜不是...我使用Visual Studio(.NET framework 3.5)中的「ASP.NET Web Service Application」項目類型。我沒有下載任何額外的庫或apis。 – Vampire

+1

HttpPostAttribute是從MVC和只存在於.NET 4.0中http://msdn.microsoft.com/en-us/library/system.web.mvc.httppostattribute(v=vs.108).aspx –

回答

0

ASP.NET Web服務應用程序的行爲與ASP.NET MVC的行爲不同,它符合您的期望。在您的代碼中,Amiram Korach指出HttpGet/HttpPost和ActionName屬性都屬於MVC。作爲Web服務應用程序託管時,這些屬性將被忽略。

Web服務應用程序中的「路由」基於方法名稱(HelloWorldPost和HelloWorld)而不是基於HTTP VERB。

要觸發POST流,你必須調用HelloWorldPost(service.asmx/HelloWorldPost)

+0

謝謝。你幾乎證實了我的懷疑 - 我混淆了2個不同的東西。我重寫了使用WCF服務的整個事情,它現在對我來說正確工作:) – Vampire

1

我有一個想法。

對於初學者來說,對於侑Web服務web.config文件看起來就像這樣:

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

接下來,無論你使用什麼形式的方法,調用Web方法X。

[WebMethod] 
public string X() 
{ 
    //so, you detect which method is invoked by using 
    // HttpContext.Current.Request.HttpMethod 
    if (HttpContext.Current.Request.HttpMethod == "POST") { 
    //do something now you know it is post method 
    } 
    else { 
    //now, it should be get method and you do something different 
    } 
//end of web method 
} 

我的主要觀點是,你檢查HttpContext.Current.Request.HttpMethod,並根據所用,你調用不同的方法方法。

相關問題