[c#] WCF REST 메서드에서 사용자 지정 HTTP 상태 코드를 반환하려면 어떻게해야합니까?

요청 된 리소스를 찾을 수없는 등 WCF REST 호출에서 문제가 발생한 경우 OperationContract 메서드에서 HTTP 응답 코드 (예 : HTTP 404와 같은 것으로 설정)를 어떻게 사용할 수 있습니까?



답변

거기이다 WebOperationContext당신이 액세스 할 수는 그리고 그것은이 OutgoingResponse유형의 특성 OutgoingWebResponseContextStatusCode설정할 수있는 속성을.

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


답변

이유 본문을 반환해야하는 경우 WebFaultException을 살펴보십시오.

예를 들면

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


답변

404의 경우 WebOperationContext.Current.OutgoingResponse에 SetStatusAsNotFound (string message) 라는 기본 제공 메서드 가있어 상태 코드를 404로 설정하고 한 번의 호출로 상태 설명을 설정합니다.

도있다 참고 (열린 위치) SetStatusAsCreated 한 통화와 201 상태 코드 및 위치 헤더를 설정한다.


답변

헤더에서 상태 설명을보고 싶다면 REST 메소드는 아래와 같이 Catch () 섹션에서 null을 반환해야합니다.

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


답변

WebOperationContextStatusCodeStatusDescription을 사용하여 상태 코드 및 이유 본문을 반환 할 수도 있습니다 .

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());

참조 : https://social.msdn.microsoft.com/Forums/en-US/f6671de3-34ce-4b70-9a77-39ecf5d1b9c3/weboperationcontext-http-statuses-and-exceptions?forum=wcf


답변

이것은 WCF 데이터 서비스에서 작동하지 않았습니다. 대신 데이터 서비스의 경우 DataServiceException을 사용할 수 있습니다. 다음 게시물이 유용하다는 것을 알았습니다.
http://social.msdn.microsoft.com/Forums/en/adodotnetdataservices/thread/f0cbab98-fcd7-4248-af81-5f74b019d8de