Feathers请求框架调用WCF服务:单双引号兼容问题解决方案咨询
解决Feathers请求与WCF的JSON引号冲突问题
我来帮你搞定这个引号不兼容的麻烦,有两个可行方向,你可以根据自己的场景选:
一、强制Feathers请求框架使用双引号(更推荐)
Feathers底层依赖的request库本身是支持标准JSON格式的,出现单引号大概率是数据没经过正确的JSON序列化。你可以通过这两种方式确保请求体是标准双引号JSON:
- 手动序列化请求数据:在调用Feathers服务时,用
JSON.stringify()处理要发送的数据,同时指定正确的Content-Type头:const userData = { name: 'Alice' }; app.service('your-wcf-service').create(JSON.stringify(userData), { headers: { 'Content-Type': 'application/json' } }); - 配置Feathers启用标准JSON序列化:如果是自定义Feathers服务,可在服务的
setup方法里开启json选项,让request库自动按标准JSON格式处理数据:app.use('/your-wcf-service', { async create(data) { // 业务逻辑处理 }, setup(app) { this.options = { json: true // 强制使用标准双引号JSON }; } });
这样发送的请求体就会是{"name": "Alice"}这种WCF默认能识别的格式了。
二、让WCF接受单引号格式的JSON
如果实在没法修改Feathers的请求格式,也可以调整WCF的配置,让它支持解析单引号包裹的JSON。WCF默认的DataContractJsonSerializer不支持单引号,需要替换成Newtonsoft.Json(Json.NET)来处理序列化/反序列化:
- 先安装Newtonsoft.Json及对应的WCF兼容包
- 创建自定义消息格式化器,允许解析单引号:
public class JsonNetMessageFormatter : IDispatchMessageFormatter { private readonly JsonSerializer _jsonSerializer; public JsonNetMessageFormatter() { _jsonSerializer = new JsonSerializer { ContractResolver = new CamelCasePropertyNamesContractResolver(), QuoteChar = '\'' // 允许单引号作为JSON字符串包裹符 }; } // 实现IDispatchMessageFormatter接口的方法,核心逻辑是用JsonSerializer读取请求体 // 省略具体实现代码,可参考Json.NET官方文档的WCF集成示例 } - 在WCF服务配置中替换默认格式化器:
(注:public class CustomServiceHostFactory : ServiceHostFactory { protected override ServiceHost CreateServiceHost(Type serviceType, Uri[] baseAddresses) { var host = base.CreateServiceHost(serviceType, baseAddresses); var endpoint = host.Description.Endpoints.First(); // 移除默认的DataContractJsonSerializer行为 endpoint.Behaviors.Remove(typeof(DataContractJsonSerializerOperationBehavior)); // 添加自定义的Json.NET行为 endpoint.Behaviors.Add(new JsonNetOperationBehavior()); return host; } }JsonNetOperationBehavior是绑定自定义格式化器的行为类,需自行实现,核心是在ApplyDispatchBehavior方法中设置我们的JsonNetMessageFormatter)
这样WCF就能解析单引号包裹的JSON请求体了。
总的来说,第一种方法更简单合规,毕竟标准JSON就是用双引号的,改动Feathers的请求格式不需要调整WCF的现有配置,更省心。
内容的提问来源于stack exchange,提问作者Lars Ladegaard
相关产品推荐
相关产品推荐

