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

2023-12-19

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

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

服务合同受约束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。您本质上只是发送原始数据并设置内容标头,以便客户端知道如何解释它。这对我们有用,因为我们只是将图像发送到浏览器。

[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;
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何使用 JSON 从 WCF REST 服务返回 Base64 编码的字节数组? 的相关文章

  • 在模板类中声明模板友元类时出现编译器错误

    我一直在尝试实现我自己的链表类以用于教学目的 我在迭代器声明中指定了 List 类作为友元 但它似乎无法编译 这些是我使用过的 3 个类的接口 Node h define null Node
  • C# 异步等待澄清?

    我读了here http blog stephencleary com 2012 02 async and await html that 等待检查等待的看看它是否有already完全的 如果 可等待已经完成 那么该方法将继续 运行 同步
  • 根据属性的类型使用文本框或复选框

    如果我有这样的结构 public class Parent public string Name get set public List
  • 如何在 Cassandra 中存储无符号整数?

    我通过 Datastax 驱动程序在 Cassandra 中存储一些数据 并且需要存储无符号 16 位和 32 位整数 对于无符号 16 位整数 我可以轻松地将它们存储为有符号 32 位整数 并根据需要进行转换 然而 对于无符号 64 位整
  • C++11 删除重写方法

    Preface 这是一个关于最佳实践的问题 涉及 C 11 中引入的删除运算符的新含义 当应用于覆盖继承父类的虚拟方法的子类时 背景 根据标准 引用的第一个用例是明确禁止调用某些类型的函数 否则转换将是隐式的 例如最新版本第 8 4 3 节
  • 如何从 Visual Studio 将视图导航到其控制器?

    问题是解决方案资源管理器上有 29 个项目 而且项目同时具有 ASP NET MVC 和 ASP NET Web 表单结构 在MVC部分中 Controller文件夹中有大约100个子文件夹 每个文件夹至少有3 4个控制器 视图完全位于不同
  • 如何连接重叠的圆圈?

    我想在视觉上连接两个重叠的圆圈 以便 becomes 我已经有部分圆的方法 但现在我需要知道每个圆的重叠角度有多大 但我不知道该怎么做 有人有主意吗 Phi ArcTan Sqrt 4 R 2 d 2 d HTH Edit 对于两个不同的半
  • 如何在 C++ 中标记字符串?

    Java有一个方便的分割方法 String str The quick brown fox String results str split 在 C 中是否有一种简单的方法可以做到这一点 The 增强分词器 http www boost o
  • 重载 (c)begin/(c)end

    我试图超载 c begin c end类的函数 以便能够调用 C 11 基于范围的 for 循环 它在大多数情况下都有效 但我无法理解和解决其中一个问题 for auto const point fProjectData gt getPoi
  • 在 Unity 中实现 Fur with Shells 技术

    我正在尝试在 Unity 中实现皮毛贝壳技术 http developer download nvidia com SDK 10 5 direct3d Source Fur doc FurShellsAndFins pdf Fins 技术被
  • 如何获取 EF 中与组合(键/值)列表匹配的记录?

    我有一个数据库表 其中包含每个用户 年份组合的记录 如何使用 EF 和用户 ID 年份组合列表从数据库获取数据 组合示例 UserId Year 1 2015 1 2016 1 2018 12 2016 12 2019 3 2015 91
  • WcfSvcHost 的跨域异常

    对于另一个跨域问题 我深表歉意 我一整天都在与这个问题作斗争 现在已经到了沸腾的地步 我有一个 Silverlight 应用程序项目 SLApp1 一个用于托管 Silverlight SLApp1 Web 的 Web 项目和 WCF 项目
  • 如何定义一个可结构化绑定的对象的概念?

    我想定义一个concept可以检测类型是否T can be 结构化绑定 or not template
  • 为什么 C# 2.0 之后没有 ISO 或 ECMA 标准化?

    我已经开始学习 C 并正在寻找标准规范 但发现大于 2 0 的 C 版本并未由 ISO 或 ECMA 标准化 或者是我从 Wikipedia 收集到的 这有什么原因吗 因为编写 审查 验证 发布 处理反馈 修订 重新发布等复杂的规范文档需要
  • C# xml序列化必填字段

    我需要将一些字段标记为需要写入 XML 文件 但没有成功 我有一个包含约 30 个属性的配置类 这就是为什么我不能像这样封装所有属性 public string SomeProp get return someProp set if som
  • LINQ:使用 INNER JOIN、Group 和 SUM

    我正在尝试使用 LINQ 执行以下 SQL 最接近的是执行交叉联接和总和计算 我知道必须有更好的方法来编写它 所以我向堆栈团队寻求帮助 SELECT T1 Column1 T1 Column2 SUM T3 Column1 AS Amoun
  • 如何在 Android 中使用 C# 生成的 RSA 公钥?

    我想在无法假定 HTTPS 可用的情况下确保 Android 应用程序和 C ASP NET 服务器之间的消息隐私 我想使用 RSA 来加密 Android 设备首次联系服务器时传输的对称密钥 RSA密钥对已在服务器上生成 私钥保存在服务器
  • C# 中的 IPC 机制 - 用法和最佳实践

    不久前我在 Win32 代码中使用了 IPC 临界区 事件和信号量 NET环境下场景如何 是否有任何教程解释所有可用选项以及何时使用以及为什么 微软最近在IPC方面的东西是Windows 通信基础 http en wikipedia org
  • MySQL Connector C/C API - 使用特殊字符进行查询

    我是一个 C 程序 我有一个接受域名参数的函数 void db domains query char name 使用 mysql query 我测试数据库中是否存在域名 如果不是这种情况 我插入新域名 char query 400 spri
  • 从 mvc 控制器使用 Web api 控制器操作

    我有两个控制器 一个mvc控制器和一个api控制器 它们都在同一个项目中 HomeController Controller DataController ApiController 如果我想从 HomeController 中使用 Dat

随机推荐

  • php-ga:如何识别自然流量?

    我正在做所有的 Google Analytics 服务器端工作 但 GA 仅跟踪直接或推荐 而且我不知道如何跟踪有机 这是一段可以直接获取或引用的代码 Campaign is used for the referrals If not in
  • 编译 create-react-app 时出现构建错误

    我是 Reactjs 的新手 正在开始学习它 我一直在尝试启动一个基本的 hello world 程序 但它在编译级别失败 使用 create react app hello world 创建了一个启动 hello word 程序 它给了我
  • 播放 YouTube 视频时出现错误“网络 [400] 出现问题”

    我正在使用 Android You tube API 播放 you Tube 视频 某些 URL 工作正常 但在某些 URL 中 我在屏幕上发现错误消息 显示 网络出现问题 400 点击重试 互联网已连接 请帮助我 提前致谢 This li
  • 如何在 Swift 中将十进制数转换为二进制数?

    如何在 Swift 中将 Int 转换为 UInt8 例子 我想将数字 22 转换为 0b00010110 var decimal 22 var binary UInt8 What should I write here 您可以将十进制值转
  • 我们如何从远程资源管理器中删除 ssh 目标

    远程资源管理器侧边栏有一个明显的图标 用于添加新目标 但我找不到用于删除或编辑目标的选项 就我而言 服务器的 IP 经常更改 因此它们只是继续在侧边栏中添加 现在有清理方法 目标是否存储在我可以手动编辑的文件中 您可以通过编辑删除或编辑它
  • 合并不同维度 r 的列表元素[重复]

    这个问题在这里已经有答案了 我有一个 df df data frame year c rep 2018 4 rep 2017 3 Area c 1 4 1 3 P 1 7 N 1 7 我想按年份将其拆分 然后再次将所有内容合并在一起 以便我
  • 绘制圆角矩形时出现透明度问题

    我正在尝试使用我在教程中找到的一些代码绘制带圆角的矩形 我稍作修改 Rounded rectangle algorithm copied from http ju outofmemory cn entry 18060 def round c
  • 使用 urllib2 时出现“TypeError: a float is required”

    我正在关注推特 API 文档 https dev twitter com docs auth application only auth发出仅限应用程序的请求 执行时发生错误第2步 获取不记名令牌 我不熟悉回溯中这些模块的详细信息 有人可以
  • 如果函数没有显式使用“ret”,为什么没有返回值

    我有以下程序 SECTION text main mov ebx 10 mov ecx 50 repeat inc ebx loop repeat mov eax ebx ret 当该程序运行时 它按预期返回 60 然而 如果你放弃了最后的
  • Cloudant 和 CouchOne 之间的区别?

    我想知道 Cloudant 和 CouchOne 之间有什么区别 好问题 我的快速回答 CouchOne 由 CouchDB Apache 项目的创始人 Damien Katz 领导 CouchOne 现在专注于缩小 couchdb 的规模
  • 如何提高填充大量树视图的性能?

    首先 我正在以问答方式回答我自己的问题 所以我不一定需要任何人来回答这个问题 这是我学到的东西 很多人都可以利用它 我有一个由许多不同节点组成的树视图 每个节点的后面都有一个对象Data属性 对象引用一个对象主列表中的不同层次结构级别 该列
  • 无法使用 Knockout JS 从 jquery 自动完成中选择/绑定项目

    当我终于能够从列表中添加和删除项目之后 看小提琴 http jsfiddle net spstieng THJE3 46 我继续实现 jQuery 自动完成 看完之后卢恩的例子 https stackoverflow com questio
  • 如何在jQuery中缓存$.post-request的结果?

    我有一个小的 jQuery 脚本 它通过查看 ID 来获取信息 防止多次请求相同数据的最佳方法是什么 例如 在 jQuery 中缓存的最佳实践是什么 我尝试过使用 post and ajax选项 cache 设置为 true 但请求发送多次
  • 使用 jQuery 的 .each() 函数将函数附加到多个幻灯片容器

    我在单页网站上有很多小的 jQuery Cycle 幻灯片 div 容器 例如 div class foo bar data value varies on each container img src directory img 0 jp
  • Unity3D - 如何制作纹理改变静音按钮/切换?

    我正在尝试在我的 Android 游戏菜单中制作一个静音按钮 因此当我按下该按钮时 纹理会从正在播放的扬声器符号更改为静音扬声器符号 我已经在 Photoshop 中制作了 因此 当音频播放时 它将有一个 扬声器 符号 但是当我按下它时 它
  • PHP for iPad 或其他解决方案

    这是一个棘手的问题 我正在为 iPad 开发一个网络应用程序 该应用程序将作为信息亭安装 该应用程序本质上是一个测验 不需要将数据存储在数据库中 但需要处理从一页到另一页的数据 从问题页到结果页 最初的解决方案是简单的 PHP 我现在获悉
  • 使用http状态202进行异步操作

    我正在为接受用户贡献数据的服务编写 REST API 我希望所有操作保持完全异步 这包括 PUT POST DELETE 甚至 GET 请求 我的想法是接收请求 对其进行足够的处理以确保它是有效的请求 然后传递 HTTP 202 接受的响应
  • 在多次调用的函数内编译正则表达式

    如果您在函数内编译正则表达式 并且该函数被多次调用 Python 是否每次都重新编译正则表达式 或者 Python 是否缓存已编译的正则表达式 假设正则表达式没有更改 例如 def contains text of interest lin
  • Play 2.4:表单:找不到参数消息的隐式值:play.api.i18n.Messages

    我是 Play 框架的新手 并试图模仿你好世界在我的本地机器上进行示例 但遇到错误 routes Home page GET controllers Application index Hello action GET hello cont
  • 如何使用 JSON 从 WCF REST 服务返回 Base64 编码的字节数组?

    我有一个简单的 WCF REST 方法 它将返回字节数组中的图像 文件 等 OperationContract WebGet UriTemplate TestMethod byte TestMethod 服务合同受约束webHttpBind