저는 놀라운 라이브러리 인 ServiceStack을 사용하기 시작했습니다.ServiceStack 및 스트림 반환
그러나 xml이 특정 형식이어야하는 xml 및 json을 반환해야하는 비즈니스 요구 사항이 있습니다.
<service name="service1" type="audio" .../>
그래서 기본적으로 속성의 무리 :
예를 들어 우리는 형식의 XML을 기대하는 고객을 기존했다.
ServiceStack은 DTO 개념을 사용하고 xml 특성을 사용하는 위의 형식이 아닌 xml 요소를 반환하는 DataContractSerializer를 사용한다는 것을 알고 있습니다.
난 여전히 (수락 헤더에 응용 프로그램/XML 또는 응용 프로그램/JSON 전달) 요청을 DTO들을 사용하고 난 후, 내 자신의 XML 문자열 또는 JSON 문자열을 만든 다음 그들을 반환 할:
string result = "....xml or json string...";
return new MemoryStream(Encoding.UTF8.GetBytes(result));
결과 문자열은 xml 문자열 또는 json 문자열 일 수 있습니다.
필자는 Content-Type을 text/html로 인식했습니다.
내가 사용하는 접근 방식을 사용하면 REST 원칙을 위반합니까? 현재 Content-Type에 문제가 있습니까 (text/html)?
이 방법을 사용하면 비즈니스 요구 사항을 해결할 수 있습니다.
편집
나는 같은 httpResult를 반환 할 수 있다는 것을 발견 :
올바른 콘텐츠 유형을 제공return new HttpResult(
new MemoryStream(Encoding.UTF8.GetBytes(result)), "application/xml");
.
이 경로를 사용하면 올바른 방법입니까, 아니면 문제가 있습니까?
감사합니다. –
스트림이 아닌 문자열을 반환하면 어떤 이점이 있습니까? –
아니, 둘 다 ASP.NET의 HttpResponse OutputStream에 직접 작성됩니다. 따라서 MemoryStream을 사용하면 (메모리에 String이 이미있는 경우) 추가 오버 헤드가 추가됩니다. 출력을 스트리밍 할 때 문자열을 반환하는 것이 좋습니다 (예 : 메모리에서 전체 응답로드 방지). – mythz