webapi做微信公众号后台,收到的文本消息不完整

shijianzhongg 2016-12-18 10:50:27

[HttpPost]
public void Post([FromBody]dynamic value) {
try {
LogHlper.Instance.Logger(value);
LogHlper.Instance.Logger(HttpContext.Current.Request.ContentLength.ToString());
LogHlper.Instance.Logger(HttpContext.Current.Request.InputStream.Length.ToString());
string poststring = string.Empty;
using (Stream stream = HttpContext.Current.Request.InputStream) {

LogHlper.Instance.Logger(stream.Length.ToString());
Byte[] postBytes = new Byte[stream.Length];
stream.Read(postBytes, 0, postBytes.Length);
poststring = Encoding.UTF8.GetString(postBytes);
LogHlper.Instance.Logger(poststring);
HttpContext.Current.Response.Write("success");
}
}
catch (Exception ee) {
LogHlper.Instance.Logger("catch"+ee.ToString());
HttpContext.Current.Response.Write("success");
}
}
收到的消息不完整,以下为收到的消息
2016-12-18 10:43:47,349 CreateTime>1482029017</CreateTime>
<MsgType><![CDATA[text]]></MsgType>
<Content><![CDATA[88]]></Content>
<MsgId>6365266160152490236</MsgId>
</xml>
...全文
364 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
shijianzhongg 2016-12-19
  • 打赏
  • 举报
回复
stream.Position = 0; 可行,已获取谢谢@assky124
assky124 2016-12-19
  • 打赏
  • 举报
回复
        private string GetRequestString()
        {
            var stream = this.HttpContext.Request.InputStream;
            stream.Position = 0;
            byte[] buffer = new byte[stream.Length];
            stream.Read(buffer, 0, buffer.Length);
            return System.Text.Encoding.UTF8.GetString(buffer);
        }
这样试试
shijianzhongg 2016-12-19
  • 打赏
  • 举报
回复
不好调试,部署到服务器上了
shijianzhongg 2016-12-19
  • 打赏
  • 举报
回复
如果不用HttpContext.Current.Request.InputStream  这个,value 为空,什么都取不到,所有用HttpContext 去取的, 我感觉用webapi 做这个应该没问题吧,顺便学习以下webapi 和微信公众号 所以就联合到一起了
brucel51 2016-12-19
  • 打赏
  • 举报
回复
引用 5 楼 shijianzhongg 的回复:
不好调试,部署到服务器上了
发布时用Debug发布,使用远程调试。
江南小鱼 2016-12-18
  • 打赏
  • 举报
回复
看代码没看不出毛病,会不会你的LogHlper.Instance.Logger有bug呢? 单步调试下poststring的值
  • 打赏
  • 举报
回复
简单来说,你应该从 Position=0 的位置开始读取数据。 但是使用一个多余的“服务框架”,它不但是多余的做了许多读写工作,而且你也被它带得忽略了跨平台的通用性。
  • 打赏
  • 举报
回复
使用 ashx。 既然你使用 HttpContext.Current.Request.InputStream 和 HttpContext.Current.Response.Write 之类的,怎么会舍近求远去使用 webapi?

110,536

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧