zoukankan      html  css  js  c++  java
  • 一般处理程序(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
  • 相关阅读:
    vip视频播放
    一行Python代码画心型
    使用赫夫曼编码压缩数据
    动态规划与贪婪算法学习笔记
    boost 编写finger服务
    磁盘保护原理简介
    知乎上的一道题目 如何判断某个二进制数如是否存在两位1中间有包含0的情况?
    <Linux多线程服务端编程>学习记录
    Debian8 下面 muduo库编译与使用
    无盘工作站原理分析
  • 原文地址:https://www.cnblogs.com/romanticcrystal/p/12047254.html
Copyright © 2011-2022 走看看