将文件附加到WCF REST服务响应

Dav*_*ler 5 rest wcf

我有一个看起来像这样的资源:

/users/{id}/summary?format={format}
Run Code Online (Sandbox Code Playgroud)

什么时候format是"xml"或"json"我用一个由WCF自动编码的用户摘要对象进行响应 - 到目前为止很好.但是当format等于"pdf"时,我希望我的回复包括一个简单的HTTP响应主体和一个PDF文件附件.

这是怎么做到的?黑客攻击WebOperationContext.Current.OutgoingResponse似乎不起作用,即使这样做也不会是正确的.在CDATA部分中包含文件的位或响应中的某些内容是不安全的.我应该创建一个子类Message,然后提供一个IDispatchMessageFormatter响应它的自定义?我走了一小段路,但最终发现文件不透明.

什么是对的?

Dav*_*ler 6

事实证明,我需要的是WCF"原始"方式,如所描述这里.从广义上讲,我想这样做:

[OperationContract, WebGet(UriTemplate = "/users/{id}/summary?format={format}"]
public Stream GetUserSummary(string id, string format)
{
    if(format == "pdf")
    {
        WebOperationContext.Current.OutgoingResponse.ContentType = "application/pdf";
        return new MemoryStream(CreatePdfSummaryFileForUser(id));
    }
    else
    {
        // XML or JSON serialization.  I can't figure out a way to not do this explicitly, but my use case involved custom formatters anyway so I don't care.
    }
}
Run Code Online (Sandbox Code Playgroud)