I have a resource that looks something like this:
/users/{id}/summary?format={format}
When format
is "xml" or "json" I respond with a user summary object that gets automagically encoded by WCF - fine so far. But when format
equals "pdf", I want my response to consist of a trivial HTTP response body and a PDF file attachment.
How is this done? Hacking on WebOperationContext.Current.OutgoingResponse
doesn't seem to work, and wouldn't be the right thing even if it did. Including the bits of the file in a CDATA section or something in the response isn't safe. Should I create a subclass of Message
, then provide a custom IDispatchMessageFormatter
that responds with it? I went a short distance down that path but ultimately found the documentation opaque.
What's the right thing?
It turns out that what I need is WCF "raw" mode, as described here. Broadly speaking, I want to do this:
In theory you could do it with a multi-part content MIME type (see http://www.faqs.org/rfcs/rfc2387.html). However, it would be much easier to return a URL in the XML/JSON response and the client can do a GET on that link to return the file.