function get_org(id) {
var url = "/Handler/AjaxHandler.ashx";
var post_data = '{ id: "'+id+'" }'; //这里拼接一个字符串格式的JSON就可以了。如果频繁操作的话,可以考虑使用jquery.json或者自己写个方法,把josn对象转换为字符串的表达式。
$.ajax({
url: url,
type: "POST",
dataType: "json",
data: { action: "CallAjax", asm:"Framework.Web",className:"AjaxDemo", form: [post_data] },//<span style="color: rgb(255, 0, 0);">我在这里通过form这个参数传递过去的,但是在接收的时候是个null</span>
success: function (data) {
if (data != null && data != "") {
alert(data);
}
},
error: function (XMLHttpRequest, textStatus) {
alert("异常:" + XMLHttpRequest.reponseText + ";Status:" + textStatus);
}
});
}
var url = "/Handler/AjaxHandler.ashx";
var post_data = '{ id: "'+id+'" }'; //这里拼接一个字符串格式的JSON就可以了。如果频繁操作的话,可以考虑使用jquery.json或者自己写个方法,把josn对象转换为字符串的表达式。
$.ajax({
url: url,
type: "POST",
dataType: "json",
data: { action: "CallAjax", asm:"Framework.Web",className:"AjaxDemo", form: [post_data] },//<span style="color: rgb(255, 0, 0);">我在这里通过form这个参数传递过去的,但是在接收的时候是个null</span>
success: function (data) {
if (data != null && data != "") {
alert(data);
}
},
error: function (XMLHttpRequest, textStatus) {
alert("异常:" + XMLHttpRequest.reponseText + ";Status:" + textStatus);
}
});
}
没有的话 按楼上的传json字符串吧
string action = context.Request.Form["method"]这里应该是action吧。
方法没有问题,我试了。不过你的这种设计实在很危险,客户端请求服务器通过反射执行动作,很容易被注入危险代码啊。
参数和接受参数都不同 。你觉得你能接到吗?
data: { action: "CallAjax",asm:"Framework.Web",className:"AjaxDemo", form: [post_data] string action = context.Request.Form["method"]; XXXXXXXXXXXX
string assemblyName = context.Request.Form["asm"];
string className = context.Request.Form["className"];
string param = context.Request.Form["form"];
另外你这个form的[post_data] 又是什么东西?
我之前也都是客户端传方法 在服务器端反射执行该方法,能否举一个被注入的例子
那如果不用这种反射方法,如何设计能让前台ajax安全方便的访问ashx后台的代码呢??如果看到请回复下,谢谢哈!
在ashx中利用反射+jquery轻松处理ajax 含Demo源码
看了你的这篇文章,你这样还是会一个页面要对应一个ashx文件,那样一个项目里用ajax的多了,得要添加很多个ashx文件。我的这个是整个项目里只有一个ahsx文件,所有的ajax请求都通过这一个ashx拦截,对应到相关的程序集里反射调用对应的方法
一般都是按类别来新建ashx文件的
比如用户处理类 里面的注册 登录 更改密码 更新信息都是可以放在一个ashx文件中的
而且这种方式都是用于中小 网站的,一个网站的操作类别也不会很多
还有我再问你下 像你那样做不同样是cs文件变很多么????不一样的道理么
你这样的设计 别人只要知道你的命名空间和方法名 他们就能通过你的ashx来执行你的方法了
你的ashx权限太大了 没发现吗??
你这样的设计 别人只要知道你的命名空间和方法名 他们就能通过你的ashx来执行你的方法了"
关于第一点:我整个项目里只有一个ashx文件,这个文件里调用的方法都是aspx页面的cs代码,不需要建立很多ashx文件,比如我的登录页面,我在aspx.cs里有一个Login的方法,我的ashx文件反射调用的就是通过js传过来的方法名:Login;如果注册页面也要用ajax的话,也是通过ashx调用regester.aspx.cs里的Register方法;
第二点:程序集的名称肯定是封闭不会在前端的js里显示传递的,在实际项目中肯定是写在配置文件中,前端的js实际上传的只有类名和调用的方法名
lz他可以判断反序列出来的 p 是否实现了某个接口,甚至调用这个接口里的内容来进行权限判断。而lz自己的代码并不需要修改一行,仅需要扩展一行就行了。
而关于“这种设计太繁琐”,其实正相反。这才轻巧地三四条代码,可以将解决方案中几十个、上百个,以及不断增加的命令处理程序自动反射出来,自动执行,实在是一种相当精巧和完全可扩展的做法。
passportId: 223323,
commandName: "ABC.PaychecksToEmployee",
commandData: {
UserName: "张三",
Year: 2013,
Month: 2
},
}这样,服务器端可以根据commandName到所有命令类型中查找到相应的命令,然后将commandData反射为这个命令对象,执行这个命令,再将结果通过context输出给客户端。
请教下 如果按LZ的设计 在已有的程序下
用户如何注入能够调用System.IO.Directory.Delete("/*.*")这个方法呢
我现在的设计就是像您说的一样的。
其实我的前端传递的json数据里还包含有一个参数类型,ParamDataType,而且实际的参数值ParamData是在Framework.Model.Data里定义好了的,最终根据前端传过来的参数会反序列化成对应的Model.Data里的对象;而且,我反射调用的方法都是打了Attribute的,如果你调用的不是我自定义的打了Attribute的方法,是根本不会执行的。
http://www.suchso.com/UIweb/jquery-ajax-post-array-csharp-json.html