2012-10-28 20 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,并根据所用,你调用不同的方法方法。

相关问题