요청 된 리소스를 찾을 수없는 등 WCF REST 호출에서 문제가 발생한 경우 OperationContract 메서드에서 HTTP 응답 코드 (예 : HTTP 404와 같은 것으로 설정)를 어떻게 사용할 수 있습니까?
답변:
거기이다 WebOperationContext
당신이 액세스 할 수는 그리고 그것은이 OutgoingResponse
유형의 특성 OutgoingWebResponseContext
가 StatusCode
설정할 수있는 속성을.
WebOperationContext ctx = WebOperationContext.Current;
ctx.OutgoingResponse.StatusCode = System.Net.HttpStatusCode.OK;
WebFaultException
그러나 던지는 것은 작동하는 것 같습니다.
이유 본문을 반환해야하는 경우 WebFaultException을 살펴보십시오.
예를 들면
throw new WebFaultException<string>("Bar wasn't Foo'd", HttpStatusCode.BadRequest );
WebFaultException
을 반환 HttpStatusCode.Created
?
헤더에서 상태 설명을보고 싶다면 REST 메소드는 아래와 같이 Catch () 섹션에서 null을 반환해야합니다.
catch (ArgumentException ex)
{
WebOperationContext.Current.OutgoingResponse.StatusCode = HttpStatusCode.InternalServerError;
WebOperationContext.Current.OutgoingResponse.StatusDescription = ex.Message;
return null;
}
WebOperationContext 의 StatusCode 및 StatusDescription을 사용하여 상태 코드 및 이유 본문을 반환 할 수도 있습니다 .
WebOperationContext context = WebOperationContext.Current;
context.OutgoingResponse.StatusCode = HttpStatusCode.OK;
context.OutgoingResponse.StatusDescription = "Your Message";
WebOperationContext.Current.OutgoingResponse.StatusCode = HttpStatusCode.Unauthorized;
throw new WebException("令牌码不正确", new InvalidTokenException());
이것은 WCF 데이터 서비스에서 작동하지 않았습니다. 대신 데이터 서비스의 경우 DataServiceException을 사용할 수 있습니다. 다음 게시물이 유용하다는 것을 알았습니다. http://social.msdn.microsoft.com/Forums/en/adodotnetdataservices/thread/f0cbab98-fcd7-4248-af81-5f74b019d8de