2

ServiceStack から PDF ドキュメントを返すためのカスタム フォーマッタを実装してみました。しかし、あまり運がありません。例を見て、VCard サンプルをほとんどコピーしましたが、それを私のコードに置き換えました。私のフォーマッタは次のようになります。

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 から Register を呼び出したところ、期待どおりにコンテンツ タイプ フィルターが追加されました。私の問題は、メソッドのメタデータにアクセスするときにのみ SerializeToStream が呼び出されることです。servicestack で具体的なメソッドを呼び出すと、HTML 応答が返されます。

呼び出される URL は次のとおりです: http://mydomain.com/api/pdf/reply/GenerateDocument

リクエスト ヘッダーは次のようになります。

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 ですが、デバッガーは SerializeToStream で中断しません。

どんな助けでも大歓迎です。

4

1 に答える 1

0

Content-Type を登録した後も、クライアントは ServiceStack に PDF コンテンツ タイプが必要であることを伝える必要があります。

これは次の URL で実行できます。

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

事前定義されたルート経由:

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

または、HTTP Acceptヘッダーで、たとえば次のようにします。

GET /myservice
Host: example.org
Accept: application/pdf
于 2013-05-16T19:41:29.267 に答える