.NET 关于一般处理程序获取表单传递的参数的问题

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了.NET 关于一般处理程序获取表单传递的参数的问题相关的知识,希望对你有一定的参考价值。

2.html页面里面定义了一个表单

然后创建了一个一般处理程序(httphandler),用来获取传递的参数并输出到页面上

并通过web。config配置,如果是访问processform文件夹的,全部触发这个一般处理程序,

我通过调试发现是触发了这个一般处理程序的,但是context.request里面却全部是空的,获取不到传递的参数,使用context.Request.QueryString获取也是空的

现在我就是想知道,不改表单的action的url地址的情况下,如何能获取到传递过来的参数。直接在表单的action的url地址写Handler1。ashx的地址这个是能正确获取参数的,但是这样写就会暴露文件的地址,我就是想隐藏ashx文件的地址

表单提交的数据使用context.Request.Form["alje...."],这样就可以了,表单提交用post 参考技术A context.Request.Form["xxxxx"]追问

都没有

追答

调试看下http提交了表单数据没,高版本的IE的开发人员工具有这功能,chorme也有,用fiddler也可以

参考技术B 表单换成post试试 参考技术C 可以试试用session传值

一般处理程序(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

 

以上是关于.NET 关于一般处理程序获取表单传递的参数的问题的主要内容,如果未能解决你的问题,请参考以下文章

将数据传递到处理程序的 Jquery ajax 不起作用(Asp.net、C#、Jquery)

微信小程序-关于post 过来服务器没有获取到数据问题

.NET Maui 自定义处理程序将参数从 xaml 代码传递到处理程序代码?

js如何将参数传递到后台,大侠帮忙

asp.net jquery ajax post 后台页面获取不到值 怎么解决?

关于php的参数传递问题