2012-10-28 1 views
1

HttpGet 및 HttpPost 요청에 다르게 응답하는 웹 서비스를 만들려고합니다.ASP.NET 웹 서비스 - 메서드를 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 (게시 또는 가져 오기)에 대한 모든 요청은 두 번째 기능을 시작합니다. 다른 방법으로해야합니까? 또한이 기능을 제한하려고 시도했습니다.

[ScriptMethod(UseHttpGet = false)] 

하지만 그 역시 차이가 없습니다.

+0

asp.net webapi를 사용하고 있습니까? –

+0

아마도 ... 저는 Visual Studio (.NET Framework 3.5)에서 "ASP.NET 웹 서비스 응용 프로그램"프로젝트 유형을 사용하고 있습니다. 추가 libs 또는 api를 다운로드하지 않았습니다. – 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 웹 서비스 응용 프로그램은 기대 한대로 ASP.NET MVC와 다르게 동작합니다. 코드에서 HttpGet/HttpPost 및 ActionName 특성은 Amiram Korach가 지적한대로 MVC에 속합니다. 이러한 속성은 웹 서비스 응용 프로그램으로 호스팅 될 때 무시됩니다.

웹 서비스 응용 프로그램의 "라우팅"은 HTTP 동사 (VERB)를 기반으로하지 않고 메서드 이름 (HelloWorldPost 및 HelloWorld)을 기반으로합니다.

당신은 내가 생각이 HelloWorldPost (Service.asmx를/HelloWorldPost)

+0

감사합니다. 너는 내가 의심하는 것을 거의 확인했다. 나는 2 가지 다른 것들을 뒤섞었다. 나는 WCF 서비스를 사용하여 모든 것을 다시 작성했고 그것은 지금 나를 위해 올바르게 작동하고있다. :) – Vampire

1

를 호출 할 필요는 POST 흐름을 트리거합니다.

우선,을 yor 웹 서비스에 대한 web.config 파일은 다음과 같이 표시됩니다

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

다음에 관계없이 사용하는 양식 방법, 당신은 웹 방식의 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을 확인 및 방법, 당신은 다른 방법을 호출하는 데 사용됩니다에 따라이다.