wcf rest 从Message里获取原生body
来源:互联网 发布:update sql 多项条件 编辑:程序博客网 时间:2024/05/01 21:05
最近在学习wcf rest,从google里找到如何从Message里获取原生body,在此写成扩展方法,避忘......
using System;using System.IO;using System.Runtime.Serialization.Json;using System.ServiceModel.Channels;using System.Xml;namespace System.ServiceModel.Web{ public static class WcfRestMessageExtension { private static byte[] ReadRaw(Message message) { var bodyReader = message.GetReaderAtBodyContents(); bodyReader.ReadStartElement("Binary"); //bodyReader.ReadStartElement(); return bodyReader.ReadContentAsBase64(); } public static WebContentFormat BodyFormat(this Message message) { object bodyFormatProperty; if (!message.Properties.TryGetValue(WebBodyFormatMessageProperty.Name, out bodyFormatProperty)) throw new InvalidOperationException(); return (bodyFormatProperty as WebBodyFormatMessageProperty).Format; } public static Message RawBody(this Message message, out byte[] body) { MemoryStream ms; var m = RawBody(message, out ms); body = ms.ToArray(); ms.Dispose(); return m; } public static Message RawBody(this Message message, out MemoryStream bodyStream) { MemoryStream ms = null; var bodyFormat = message.BodyFormat(); XmlDictionaryWriter w = null; switch (bodyFormat) { case WebContentFormat.Default: case WebContentFormat.Xml: ms = new MemoryStream(); w = XmlDictionaryWriter.CreateTextWriter(ms); break; case WebContentFormat.Json: ms = new MemoryStream(); w = JsonReaderWriterFactory.CreateJsonWriter(ms); break; case WebContentFormat.Raw: return BinaryRawBody(message, out bodyStream); } message.WriteMessage(w); w.Flush(); ms.Position = 0; var reader = bodyFormat == WebContentFormat.Json ? JsonReaderWriterFactory.CreateJsonReader(ms, XmlDictionaryReaderQuotas.Max) : XmlDictionaryReader.CreateTextReader(ms, XmlDictionaryReaderQuotas.Max); var newMessage = Message.CreateMessage(reader, int.MaxValue, message.Version); newMessage.Properties.CopyProperties(message.Properties); ms.Position = 0; bodyStream = ms;return newMessage; } private static Message BinaryRawBody(Message message, out MemoryStream ms) { var bodyReader = message.GetReaderAtBodyContents(); bodyReader.ReadStartElement("Binary"); var body = bodyReader.ReadContentAsBase64(); var m = new MemoryStream(); var writer = XmlDictionaryWriter.CreateBinaryWriter(m); writer.WriteStartElement("Binary"); writer.WriteBase64(body, 0, body.Length); writer.WriteEndElement(); writer.Flush(); m.Position = 0; ms = new MemoryStream(m.ToArray()); writer.Close(); m.Dispose(); ms.Position = 0; var reader = XmlDictionaryReader.CreateBinaryReader(ms, XmlDictionaryReaderQuotas.Max); var newMessage = Message.CreateMessage(reader, int.MaxValue, message.Version); newMessage.Properties.CopyProperties(message.Properties); ms.Position = 0; return newMessage; } public static MemoryStream RawBody(this Message message) { MemoryStream ms = null; var bodyFormat = message.BodyFormat(); XmlDictionaryWriter w = null; switch (bodyFormat) { case WebContentFormat.Default: case WebContentFormat.Xml: ms = new MemoryStream(); w = XmlDictionaryWriter.CreateTextWriter(ms); break; case WebContentFormat.Json: ms = new MemoryStream(); w = JsonReaderWriterFactory.CreateJsonWriter(ms); break; case WebContentFormat.Raw: ms = new MemoryStream(ReadRaw(message)); ms.Position = 0; return ms; } message.WriteMessage(w); w.Flush(); ms.Position = 0; ms = new MemoryStream(ms.ToArray()); ms.Position = 0; w.Close(); return ms; } }}
- wcf rest 从Message里获取原生body
- beego 获取 Request Body 里的内容
- 【REST WCF】
- REST WCF
- golang--gin获取post里body的参数
- <body></ body >里的属性
- Yii2-从ActiveRecord获取原生sql
- 解决spring设置filter过滤器结合rest风格获取post请求body参数输入流问题
- WCF and REST
- WCF REST Starter Kit
- WCF实现REST服务
- WCF实现REST
- 说说WCF Rest
- REST WCF 简单架设
- WCF REST 上传图片下载
- REST VS SOAP , WCF
- WCF Rest用法
- js原生使body变色
- suse 11 linux server 配置puppet问题
- 智能指针shared_ptr组件的使用
- CentOS下安装Flashplayer
- spring.net 框架分析(二)IApplicationContext
- 11g不能在创建具有重复列的函数索引了
- wcf rest 从Message里获取原生body
- 国外程序员推荐:每个程序员都应读的书
- vb.net和c#.net转换之区别
- Oracle 分区表 总结
- Unity 鼠标拾取
- mysql、mssql、oracle各种数据库参数化写法
- 用git 查找一个log中的关键字
- Android平台Stagefright中增加flv/f4v支持及相关原理介绍
- JavaScript去除空格的三种方法 (trim)