2013-05-16 2 views
2

ServiceStack에서 PDF 문서를 반환하기 위해 사용자 정의 포맷터를 구현하려고했습니다. 운이별로 없다. 예제를 살펴본 결과 VCard 샘플을 복사했지만 코드로 대체했습니다. 내 포맷터는 다음과 같습니다.PDF 문서 반환

public class PdfFormatter 
{ 
    private const string PdfFormatContentType = "application/pdf"; 

    public static void Register(IAppHost appHost) 
    { 
     appHost.ContentTypeFilters.Register(PdfFormatContentType, SerializeToStream, (t, s) => { throw new NotImplementedException(); }); 
    } 

    public static void SerializeToStream(IRequestContext requestcontext, object dto, Stream outputstream) 
    { 
     ... 
    } 
} 

내 AppHost에서 등록이라고하고 콘텐츠 유형 필터가 예상대로 추가되었습니다. 내 문제는 SerializeToStream은 메서드의 메타 데이터에 액세스 할 때만 호출된다는 것입니다. 서비스 방법에 대한 구체적인 방법을 호출하면 HTML 응답이 반환됩니다.

라는 URL은 다음과 같습니다

Accept:text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8 
Accept-Charset:ISO-8859-1,utf-8;q=0.7,*;q=0.3 
Accept-Encoding:gzip,deflate,sdch 
Accept-Language:en-US,en;q=0.8,da;q=0.6 
Cache-Control:max-age=0 
Connection:keep-alive 
Host:mydomain.com 
User-Agent:Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.31 (KHTML, like Gecko) Chrome/26.0.1410.64 Safari/537.31 

응답 헤더는 다음과 같이 :

Cache-Control:private 
Connection:Close 
Content-Length:46 
Content-Type:application/pdf; charset=utf-8 
Date:Thu, 16 May 2013 19:59:27 GMT 
Server:ASP.NET Development Server/11.0.0.0 
X-AspNet-Version:4.0.30319 
X-Powered-By:ServiceStack/3,945 Win32NT/.NET 

응답은 실제로 PDF하지만 디버거 http://mydomain.com/api/pdf/reply/GenerateDocument

요청 헤더는 다음과 같습니다 SerializeToStream에서 중단되지 않습니다.

도움을 주시면 감사하겠습니다.

답변

0

Content-Type을 등록한 후에도 클라이언트는 여전히 ServiceStack에 PDF 콘텐츠 유형을 요구해야합니다.

http://example.org/myservice?format=pdf 

pre-defined route 비아 :

http://example.org/pdf/reply/GenerateDocument 

을 또는 HTTP 에 예를 들어 헤더, 수락 :

당신은 URL에서이 작업을 수행 할 수 있습니다 나는 것을 시도

GET /myservice 
Host: example.org 
Accept: application/pdf 
+0

을 아무런 차이가 없습니다. http : // localhost/api/pdf/metadata? op = GenerateDocument SerializeToStream이 호출되었지만 http : // localhost/api/pdf/reply/GenerateDocument? format = pdf를 호출 할 때 SerializeToStream이 호출되지 않습니다. – ThomasArdal

+0

Fiddler/WebInspector 나 WireShark 등을 사용하여 전체 HTTP 요청 및 응답을 제공 할 수 있습니까? – mythz

+0

요청 URL : HTTP : // localhost를 : 36386/API/PDF/응답/GenerateDocument 형식 = PDF 요청 방법 : GET 상태 코드 : text/html과, 응용 프로그램/XHTML + XML : 수락 200 OK – ThomasArdal