我有一个看起来像这样的资源:
/users/{id}/summary?format={format}
When format
是“xml”或“json”,我用一个由 WCF 自动编码的用户摘要对象进行响应 - 到目前为止还不错。但当format
等于“pdf”,我希望我的响应包含一个简单的 HTTP 响应正文和一个 PDF 文件附件。
这是怎么做到的?黑客攻击WebOperationContext.Current.OutgoingResponse
似乎不起作用,即使起作用也不是正确的事情。将文件的位包含在 CDATA 部分或响应中的某些内容中不安全 https://stackoverflow.com/questions/502857/use-cdata-to-store-raw-binary-streams。我应该创建一个子类吗Message
,然后提供自定义IDispatchMessageFormatter
对此作出回应?我沿着这条路走了一小段路,但最终发现文档不透明。
什么是正确的事?
事实证明我需要的是WCF“原始”模式,如上所述here https://learn.microsoft.com/en-us/archive/blogs/carlosfigueira/wcf-raw-programming-model-web。从广义上讲,我想这样做:
[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.
}
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)