开发者

Attaching files to WCF REST service responses

开发者 https://www.devze.com 2023-01-03 02:53 出处:网络
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

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 th开发者_JAVA技巧ing?


It turns out that what I need is WCF "raw" mode, as described here. Broadly speaking, I want to do this:

[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.
    }
}


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.

0

精彩评论

暂无评论...
验证码 换一张
取 消