2008-09-26 4 views
75

요청한 리소스를 찾을 수없는 것과 같이 WCF REST 호출에서 문제가 발생하면 내 OperationContract 메소드에서 HTTP 응답 코드 (예 : HTTP 404와 같은 값으로 설정)로 어떻게 재생할 수 있습니까?WCF REST 메서드에서 사용자 지정 HTTP 상태 코드를 반환하려면 어떻게해야합니까?

+0

확인 모든 해답은 서비스 구현에 그것을했다. 그들이 완전히 잘못된 uri를 통과한다면 어떨까요? 예기치 않은 히트 수에 404를 제공하는 방법에 대해 어떻게 생각하십니까? –

답변

96

가 액세스 할 수있는 WebOperationContext 있습니다 그것은 설정할 수있는 StatusCode 속성이 유형 OutgoingWebResponseContextOutgoingResponse 속성이 있습니다.

WebOperationContext ctx = WebOperationContext.Current; 
ctx.OutgoingResponse.StatusCode = System.Net.HttpStatusCode.OK; 
+3

이 작업은 WCF Data Services - 서비스 운영 내에서 가능합니까? 나는 행운을 얻지 못했고, 내가 설정 한 StatusCode가 다른 것에 의해 엉망이 된 것처럼 보인다. 따라서 모든 HTTP POST 요청에서 201과 같이 설정했는지에 관계없이 204로 돌아갑니다. – RyBolt

+1

제 경우에는 작동하지 않습니다. 상태는 덮어 씁니다. 그러나 'WebFaultException'을 던지면 작동하는 것 같습니다. –

23

(404)를 들어이 404 상태 코드와 하나의 호출로 상태에 대한 설명을 설정합니다 SetStatusAsNotFound (문자열 메시지)라는 WebOperationContext.Current.OutgoingResponse에 방법에 내장되어있다.

참고 : SetStatusAsCreated (Uri 위치) 상태 코드를 201로 설정하고 위치 헤더를 한 번의 호출로 설정합니다.

+0

허용되는 답변에 표시된 방법보다 선호됩니까? – crush

58

당신이 이유 몸을 반환해야 할 경우 다음 헤더의 상태 설명을 참조하고자하는 경우 예를 들어 WebFaultException

에 모습

throw new WebFaultException<string>("Bar wasn't Foo'd", HttpStatusCode.BadRequest); 
+2

우리는 정적 WebOperationContext를 사용하지 않기 때문에 이것을 받아 들였습니다. 현재 –

+0

이것은 famework 4 이후에만 유효하다는 것을 명심하십시오. http://msdn.microsoft.com/en-us/library/dd989924.aspx – sebagomez

+0

흠, .NET 4.5.1에서 이것은 상태 코드를 설정하지 않고 여전히 200을 얻고 있습니다. jsonp를 사용하고 있습니다. 자바 스크립트에서 내 콜백을 호출하고 내 메시지와 상태 코드를 정수. – Shavais

2

, REST 방식이 돌아갈 확인해야해야 다음과 같이 Catch() 섹션의 null :

catch (ArgumentException ex) 
{ 
    WebOperationContext.Current.OutgoingResponse.StatusCode = HttpStatusCode.InternalServerError; 
    WebOperationContext.Current.OutgoingResponse.StatusDescription = ex.Message; 
    return null; 
} 
+1

이것은 나에게도 효과가 없었고 여전히 200을 얻었습니다. crossDomainScriptAccessEnabled = "true"로 WebHttpBinding을 사용하고 기본 본문 스타일이 wrapped이고 기본 보내는 응답 형식이 json 인 webHttp의 종점 동작이 사용됩니다. 하지만 그건 중요하지 않아야합니까? – Shavais

0

이것은 WCF Data Services에서 나에게 적합하지 않았습니다. 대신 Data Services의 경우 DataServiceException을 사용할 수 있습니다. 유용한 게시물을 찾았습니다. http://social.msdn.microsoft.com/Forums/en/adodotnetdataservices/thread/f0cbab98-fcd7-4248-af81-5f74b019d8de

+0

그건 나에게도 도움이 안된다. 나는 다른 유용한 정보가없고 400 개의 잘못된 요청을 받았으며 아무런 응답도 없었다. – Shavais

관련 문제