返回PDF文档

时间:2013-05-16 19:34:45

标签: pdf servicestack

我尝试使用自定义格式化程序从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响应。

调用的网址为: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中断。

任何帮助都将不胜感激。

1 个答案:

答案 0 :(得分:0)

注册Content-Type后,客户端仍然需要告诉ServiceStack它想要PDF内容类型。

您可以在网址上执行此操作:

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

通过pre-defined route

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

或者在HTTP 接受标题中,例如:

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