日期:2014-05-17  浏览次数:20464 次

我用 ashx 为什么接收不到微信发过来的post数据?
 微信公众账号文档:
    当普通微信用户向公众账号发消息时,微信服务器将POST消息的XML数据包到开发者填写的URL上。各消息类型的推送XML数据包结构如下。


  官方给出的是php版本的,核心接收代码如下:
  $postStr = $GLOBALS["HTTP_RAW_POST_DATA"];
 $postObj = simplexml_load_string($postStr, 'SimpleXMLElement', LIBXML_NOCDATA);

我想把它改成asp.net版本的 在网上找了一些代码,为了研究,想到把接收到的数据存入数据库,以便观察和研究,可是总是娶不到呢? 代码如下

       public void ProcessRequest(HttpContext context)
        {
            context.Response.ContentType = "text/plain";
            string postStr = "";
            if (context.Request.HttpMethod.ToLower() == "post")
            {
                //System.IO.Stream s = System.Web.HttpContext.Current.Request.InputStream;
            System.IO.Stream s = context.Request.InputStream;
            NameValueCollection nvc = context.Request.Headers;
            string weixinXML = nvc.Get(null);
            new BLL_T_MEssage().AddNew(weixinXML);//存入数据库
            //nvc.GetObjectData(
            //context.Request.
                byte[] b = new byte[s.Length];
                s.Read(b, 0, (int)s.Length);
                postStr = System.Text.Encoding.UTF8.GetString(b);
                if (!string.IsNullOrEmpty(postStr))
                {                
                    new BLL_T_MEssage().AddNew(weixinXML);//存入数据库
                    context.Response.End();
                }
            }
            //else
            //{ Valid(context); }
        }


几乎肯定是用 context.Request 里面的方法或者属性来取吧?
------解决方案--------------------
System.IO.Stream s = context.Request.InputStream;
在这里下个断点看看。
------解决方案--------------------
你是怎么调用的ashx的呢?