gpt4 book ai didi

c# - 如何使用 JSON 从 WCF REST 服务返回 Base64 编码的字节数组?

转载 作者:可可西里 更新时间:2023-11-01 09:06:24 24 4
gpt4 key购买 nike

我有一个简单的 WCF REST 方法,它将返回字节数组中的图像/文件/等:

[OperationContract]
[WebGet(UriTemplate = "TestMethod")]
byte[] TestMethod();

服务契约绑定(bind)到具有以下行为的 webHttpBinding:

<endpointBehaviors>
<behavior name="webHttpBehavior">
<webHttp defaultOutgoingResponseFormat="Json" />
</behavior>
</endpointBehaviors>

该方法工作正常,除了字节数组的格式如下:

[25,15,23,64,6,5,2,33,12,124,221,42,15,64,142,78,3,23]

如果我删除属性 defaultOutgoingResponseFormat="Json",该服务默认为 XML 格式,并且结果在 Base64 中编码如下:

GQ8XQAYFAiEMfN0qD0COTgMX

这节省了数据传输,尤其是当数据变大时。

如何为 JSON 输出格式启用 Base64 编码?

最佳答案

几个月前,我在我们公司的网络服务中遇到了类似的问题。我必须弄清楚如何使用 json 端点发送字节数组。不幸的是,没有一个简单的答案。然而,我发现了两个解决方法,我决定使用最简单的一个。我会让你决定这些是否有帮助。

选项 1 返回 base64 编码的字符串而不是字节数组:

Microsoft 的 Convert 库可以轻松地将字节数组转换为 base 64 字符串,反之亦然。

[OperationContract]
[WebGet(UriTemplate = "TestMethod")]
string TestMethod();

public string TestMethod()
{
byte[] data = GetData();
return Convert.ToBase64String(data);
}

您的 json 结果将类似于...

{
"TestMethodResult":"GQ8XQAYFAiEMfN0qD0COTgMX"
}

然后您的客户端可以将其转换回字节数组。如果客户也使用 C#,那么简单

byte[] data = Convert.FromBase64String("GQ8XQAYFAiEMfN0qD0COTgMX");

但是,如果您有一个相当大的字节数组,就像在我们的例子中那样,以下可能是更好的选择

选项 2 返回一个流:

是的,这确实意味着您不会获得 json。您本质上只是发送原始数据并设置内容 header ,以便客户端知道如何解释它。这对我们有用,因为我们只是将图像发送到浏览器。

[OperationContract]
[WebGet(UriTemplate = "TestMethod")]
Stream TestMethod();

public Stream TestMethod()
{
byte[] data = GetData();
MemoryStream stream = new MemoryStream(data);
WebOperationContext.Current.OutgoingResponse.ContentType = "image/jpeg"; //or whatever your mime type is
stream.Position = 0;
return stream;
}

关于c# - 如何使用 JSON 从 WCF REST 服务返回 Base64 编码的字节数组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12063591/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com