This 질문은 이미 내가 묻는 것을 묻습니다.하지만 대답에 대한 설명이 필요합니다.WebGet은 WebInvoke (Method = "GET")와 기능적으로 동일합니까?
대답은 WebGet
과 WebInvoke
이 비슷하며 주된 차이는 Method
이라는 것을 나타냅니다.
그러나 Method
매개 변수를 "GET"
으로 설정하면 기능적으로 동일한 지 아니면 다른 차이점이 있습니까?
This 질문은 이미 내가 묻는 것을 묻습니다.하지만 대답에 대한 설명이 필요합니다.WebGet은 WebInvoke (Method = "GET")와 기능적으로 동일합니까?
대답은 WebGet
과 WebInvoke
이 비슷하며 주된 차이는 Method
이라는 것을 나타냅니다.
그러나 Method
매개 변수를 "GET"
으로 설정하면 기능적으로 동일한 지 아니면 다른 차이점이 있습니까?
이들은 단순히 마커 속성이며 결국 100 % 기능적으로 동일합니다. 이러한 특성을 해석하는 유일한 것은 WebHttpBehavior::GetWebMethod
방법이며 그 기능은 단순히 :
internal static string GetWebMethod(OperationDescription od)
{
WebGetAttribute webGetAttribute = od.Behaviors.Find<WebGetAttribute>();
WebInvokeAttribute webInvokeAttribute = od.Behaviors.Find<WebInvokeAttribute>();
WebHttpBehavior.EnsureOk(webGetAttribute, webInvokeAttribute, od);
if (webGetAttribute != null)
{
return "GET";
}
if (webInvokeAttribute == null)
{
return "POST";
}
return webInvokeAttribute.Method ?? "POST";
}
그것은 아니다.
난 그냥 Newtonsoft JsonSerializer이WebGet
및
WebInvoke(Method="GET")
사용에 차이가 발견
this 및
this 샘플
(어려운 방법)에 따라 MessageFormatter를 사용하여 WCF DataContractJsonSerializer를 교체하려고 몇 시간을 보냈다.
WebInvoke
으로 요청은 WebGet
의 경우와 다른 예상 된 메시지 (방법 IDispatchMessageFormatter.DeserializeRequest()
이 호출 됨)를 비 직렬화하려는 WCF 스택의 다른 파이프 라인을 통과합니다.
교훈 습득 : GET
동작
[WebInvoke의]에 대한 문서를
WebGet
을 사용 (http://msdn.microsoft.com/en-us/library/system.servicemodel.web.webinvokeattribute (V = VS .110) .aspx)는 다음과 같이 말합니다. "서비스 작업을 GET에 응답하려면 WebGetAttribute를 대신 사용하십시오." 따라서 WebInvoke는 POST, PUT 또는 DELETE와 함께 사용하기위한 용도로만 사용됩니다. –한 가지 차이점 : 내부 [System.Data.Services.Providers.BaseServiceProvider.AddOperationsFromType] (http://referencesource.microsoft.com/#System.Data.Services/System/Data/Services/Providers/BaseServiceProvider.cs,d5f831be05db2b2a , references) 메서드는 WebGet을 GET 및 WebInvoke (메서드가 GET 인 경우에도)로 POST로 처리합니다. –
@MichaelLiu 그래, 읽었지 만 코드에는 이미 WebInvoke (Method = "GET")이 포함되어 있으므로 변경하기 전에 아무 것도 깨지 말고 싶습니다. –