写了一个一般处理程序来做接口,由于字段
Content
是文本,长度可能很长,鉴于这个原因,所以不能GET
请求所以问题来了,当我改成
POST
请求,自己使用HttpHelper
类来写了一个Demovar result = new HttpHelper().GetHtml(new HttpItem() { URL = "http://localhost:24885/Comment.ashx", Method = "POST", Postdata = "action=insert_comment&art_id=1&art_title=文章标题&cid=&uid=1&unick=kerwin&content=你好&type=1&reply_id=&reply_nick=&parent_uid=&parent_nick=&parent_cid=&ip=" });调式发现
在
context.Request["action"]
、context.Request.Form
以及context.Request.QueryString
都获取不到上面的Postdata
但是我们可以在
context.Request.InputStream
参数中看见,InputStream
是有长度的156
或者在context.Request.TotalBytes
看见有数据
所以我们可以通过以下代码获取参数
var pams = System.Text.Encoding.UTF8.GetString(context.Request.BinaryRead(context.Request.TotalBytes))注意:通过上面这行代码获取参数只能获取一次,第二次获取则二进制数据不存在
我们可以对其进行解析,目前所知
pams
得到的数据有json
序列化的的字符串,此时我们可以直接反序列化,但是如果请求的时候指定了Content-Type
为application/json; charset=utf8
或者为application/x-www-form-urlencoded;charset=utf-8
此时,pams
得到的并不是json
序列化的字符串,而是含有断点续传的Boundary
除另有声明外,本文章ashx一般处理程序获取不到POST请求的参数采用 知识共享(Creative Commons) 署名-非商业性使用-相同方式共享 3.0 中国大陆许可协议 进行许可。