2012-07-31 4 views
2

인터페이스 메서드에 [WebGet(..., ResponseFormat = WebMessageFormat.Json)]이라는 주석이 달린 WCF REST 서비스가 있으며 일반적으로 JSON 형식의 응답을 제공합니다. 문제는 응답의 콘텐츠 형식이 몸이 그냥 일반 텍스트가 아닌 JSON 인코딩 된 경우에도 여전히 application/json 때문이다WebFaultException 콘텐츠 유형 변경

throw new WebFaultException<string>("helpful message",HttpStatusCode.BadRequest); 

: 지금 코드와 오류를 나타냅니다. WebOperationContext.Current.OutgoingResponse.ContentType = "text/plain";을 설정하는 오류 예외를 생성하는 도우미를 만들 수 있지만 WCF 계층에 빠른 수정이 있으면 이러한 유형의 예외에 대한 콘텐츠 형식을 설정하는 것이 좋습니다. 이 작업을 수행하는 가장 깨끗한 방법은 무엇입니까?

답변

0

WebFaultException을 상속하고 프로젝트에서 사용할 수 있습니다.

public class MyWebFaultException<T>:WebFaultException<T> 
{ 
    public MyWebFaultException(T message) 
     : base(message, HttpStatusCode.BadRequest) 
    { 
     WebOperationContext.Current.OutgoingResponse.ContentType = "text/plain"; 
    } 
} 
+0

이 방법은 도우미 방법과 거의 같습니다. 누군가가 메모를 놓치고 기본 WebFaultException 클래스를 던져도 콘텐츠 형식이 올바르게 설정 될 수 있도록 WCF 스택에 연결하는 깨끗한 방법을 찾기를 바랬습니다. 웹 동작의 'AddServerErrorHandlers'를 재정의하는 방법이있는 것처럼 보입니다. 그러나 그 방법은 너무 빠릅니다. 모든 throw가 사용자 정의 예외 유형 또는 도우미 메서드를 사용하는지 확인하는 것은 내가 여기 나온 것보다 낫습니다. 아직도 더 매끄러운 대답이 있기를 바라고 :-) – jtb