一般处理程序(ashx)获取不到POST请求的参数问题

复制代码
写了一个一般处理程序来做接口,由于字段Content是文本,长度可能很长,鉴于这个原因,所以不能GET请求

所以问题来了,当我改成POST请求,自己使用HttpHelper类来写了一个Demo

code
var 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="
});
调式发现

Image

在context.Request["action"]、context.Request.Form以及context.Request.QueryString都获取不到上面的Postdata

但是我们可以在context.Request.InputStream参数中看见,InputStream是有长度的156 或者在context.Request.TotalBytes看见有数据

Image

所以我们可以通过以下代码获取参数

code
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
复制代码

 

posted @   大da脸  阅读(2758)  评论(0编辑  收藏  举报
编辑推荐:
· PostgreSQL 和 SQL Server 在统计信息维护中的关键差异
· C++代码改造为UTF-8编码问题的总结
· DeepSeek 解答了困扰我五年的技术问题
· 为什么说在企业级应用开发中,后端往往是效率杀手?
· 用 C# 插值字符串处理器写一个 sscanf
阅读排行:
· [翻译] 为什么 Tracebit 用 C# 开发
· 腾讯ima接入deepseek-r1,借用别人脑子用用成真了~
· Deepseek官网太卡,教你白嫖阿里云的Deepseek-R1满血版
· DeepSeek崛起:程序员“饭碗”被抢,还是职业进化新起点?
· RFID实践——.NET IoT程序读取高频RFID卡/标签
点击右上角即可分享
微信分享提示