WCF REST 방법에서 사용자 정의 HTTP 상태 코드를 어떻게 반환 할 수 있습니까?
문제
요청 된 리소스를 찾을 수없는 WCF REST 통화에서 문제가 발생하면 OperationContract 메소드에서 HTTP 응답 코드 (예를 들어 HTTP 404와 같은 것으로 설정)를 어떻게 플레이 할 수 있습니까?
해결책
이있다 WebOperationContext
당신이 액세스 할 수 있고 그것을 가지고 있습니다 OutgoingResponse
유형의 속성 OutgoingWebResponseContext
여기에는 StatusCode
설정할 수있는 속성.
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.outgadingResponse ~라고 불리는 setstatusasnotfound (문자열 메시지) 상태 코드를 404로 설정하고 한 번의 호출로 상태 설명이 설정됩니다.
또한, 또한 setstatusascreated (URI 위치) 상태 코드를 한 번의 호출로 201 및 Location 헤더로 설정합니다.
헤더에서 상태 설명을 보려면 REST 메소드가 아래와 같이 Catch () 섹션에서 NULL을 반환해야합니다.
catch (ArgumentException ex)
{
WebOperationContext.Current.OutgoingResponse.StatusCode = HttpStatusCode.InternalServerError;
WebOperationContext.Current.OutgoingResponse.StatusDescription = ex.Message;
return null;
}
WebOperationContext.Current.OutgoingResponse.StatusCode = HttpStatusCode.Unauthorized;
throw new WebException("令牌码不正确", new InvalidTokenException());
당신은 또한 상태 코드와 이유를 반환 할 수 있습니다. weboperationcontext'에스 상태 코드 그리고 statusDescription:
WebOperationContext context = WebOperationContext.Current;
context.OutgoingResponse.StatusCode = HttpStatusCode.OK;
context.OutgoingResponse.StatusDescription = "Your Message";
이것은 WCF 데이터 서비스에 효과가 없었습니다. 대신 데이터 서비스의 경우 DataServiceException을 사용할 수 있습니다. 다음 게시물이 유용하다는 것을 알았습니다.http://social.msdn.microsoft.com/forums/en/adodotnetdataservices/tread/f0cbab98-fcd7-4248-af81-5f74b019d8de