.ashx 实现自动路由和参数填充
在Mvc中访问控制器,参数填充和路由控制都非常方便,但之前项目用的是webFrom,和js交互的ashx页面,路由非常麻烦要根据传进来关键字来做switch,参数填充更坑,要一个一个去form中取出来,终于把他弄成自动路由和参数填充。
先来看看Mvc是怎么做的:
public class TestController : Controller
{
public JsonResult MyTestModel(string name, int age)
{
string res = name + ":" + age;
return Json(res);
}
}
$.post(
"/Test/MyTestModel", // 路由
{ //参数
age: 20,
name: "张三"
},
function (data) { //回调
alert(data);
},
'text' //返回类型
)
结果:
mvc比较强大会自动匹配参数,如果参数为int类型,不传此参数,还会报错,这里不讲了。
public class BaseHanler : IHttpHandler
{
public void ProcessRequest(HttpContext context)
{
context.Response.ContentType = "text/plain";
var methods = context.Request.PathInfo; // 获取具有 URL 扩展名的资源的附加路径信息。
methods = methods.Substring(); //处理路由
Type type = this.GetType();
MethodInfo method = type.GetMethod(methods); //根据路由获取方法
var mParams = method.GetParameters(); //获取该方法所有参数信息
Object[] parmas = new object[mParams.Length]; //配置参数
var request = context.Request;
for (var i = ; i < parmas.Length; i++)
{
var item = mParams[i];
var value = request.Form[item.Name];
if (value == null) //取from数据作为参数 空用null替代
{
parmas[i] = value;
continue;
}
var pType = item.ParameterType;
if (pType.IsClass && !pType.Equals(typeof(string))) //非string 引用类型 用json格式转换
{
parmas[i] = JsonConvert.DeserializeObject(value.ToString(), pType);
}
else
{
parmas[i] = Convert.ChangeType(value, pType); //string 和值类型 类型转换
}
}
object res = method.Invoke(this, parmas); //获取返回值
context.Response.Write(JsonConvert.SerializeObject(res)); //以json格式返回 }
public string MyTestModel(string name, int age)
{
var c = new
{
name = name,
age = age,
};
return name + ":" + age;
} public bool IsReusable
{
get
{
return false;
}
}
}
ashx
$.post(
"/data/BaseHanler.ashx/MyTestModel", // 路由
{ //参数
age: 20,
name: "张三"
},
function (data) { //回调
alert(data);
},
'text' //返回类型
)
js代码
调试结果:
把BaseHanler 类作为基类,集成该类就有相同功能了。
.ashx 实现自动路由和参数填充的更多相关文章
- Vue跳转相同路由不同参数,解决页面数据不自动刷新
参考: https://www.cnblogs.com/ainyi/p/9340311.html https://blog.csdn.net/weixin_41888813/article/detai ...
- 六、Vue-Router:基础路由处理、路由提取成单独文件、路由嵌套、路由传参数、路由高亮、html5的history使用
一.vue-router的安装 官网文档 [官网]:https://cn.vuejs.org/v2/guide/routing.html [router文档]:https://router.vuejs ...
- Sails 关闭自动路由 Automatic Routes 功能。
Sails 关闭自动路由 Automatic Routes 功能. Sails 中的路由两种:Custom Routes 和 Automatic Routes,自定义路由和自动路由.详见文档: Sai ...
- $Django 路飞之小知识回顾,Vue之样式element-ui,Vue绑定图片--mounted页面挂载--路由携带参数
一 小知识回顾 1 级联删除问题 2 一张表关联多个表,比如有manytomanyfileds forignkey,基于对象查询存在的问题:反向查询的时候 表名小写_set.all()不知是哪个字段 ...
- vue自动路由-单页面项目(非build时构建)
博客中自动路由的原理? 答:简单点说,就是在请求页面时,根据url进行动态添加路由. 与其它自动路由博客的区别? 目前网上的博客,一般都是在build的时候进行动态路由添加,而本博客,采用的是在获得u ...
- vue.js中路由传递参数
知识点:vue路由传递参数,第二个页面(A.B页面)拿到参数,使用参数 方法一:使用 <router-link :to="{name:'edithospital',params:{hi ...
- 仿联想商城laravel实战---3、前端页面搭建(什么情况下需要路由接参数)
仿联想商城laravel实战---3.前端页面搭建(什么情况下需要路由接参数) 一.总结 一句话总结: 比如访问课程的时候,不同的课程(比如云知梦),比如访问不同的商品,比如访问不同的分类 //商品详 ...
- $routeParams 实现路由指定参数
[摘要]后台管理系统权限控制到按钮级别,将每一个资源的key绑定在url中,渲染页面的时候去根据key来获取当前页面的按钮列表. router.js angular.module("app. ...
- 06 Node.js学习笔记之自动路由
在以往客户端请求的文件,我们都得判断匹配才能返回相应的数据,其实我们可以设置一个自动路由,就可以不用每次去判断用户访问的是那个文件了 //1.载入http和fs模块 var http=require( ...
随机推荐
- 集合类 ArrayList实现公司职员薪水管理
package com.test; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStr ...
- plsql 查询历史执行语句
control+e. 如果执行删除.修改.增加的操作,未提交的历史记录中也有.
- Java中hashCode与equal方法详解
转载自http://blog.csdn.net/jiangwei0910410003/article/details/22739953 Java中的equals方法和hashCode方法是Object ...
- redis中的事务、lua脚本和管道的使用场景
参考文章 : https://blog.csdn.net/fangjian1204/article/details/50585080
- vue:element-ui时间选择器限制只能点不能输入
原文链接:点我 <el-form-item label="门店成立日期" prop="storeSetupDate"> <template&g ...
- [BZOJ3673&3674]可持久化并查集&加强版
题目大意:让你实现一个可持久化的并查集(3674强制在线). 解题思路:刚刚介绍了一个叫rope的神器:我是刘邦,在这两题(实际上两题没什么区别)就派上用场了. 正解应该是主席树||可持久化平衡树,然 ...
- Java基础学习总结(4)——对象转型
一.对象转型介绍 对象转型分为两种:一种叫向上转型(父类对象的引用或者叫基类对象的引用指向子类对象,这就是向上转型),另一种叫向下转型.转型的意思是:如把float类型转成int类型,把double类 ...
- SpringBoot项目maven 打包时跳过测试
在打包spring boot项目时,如果测试用例特别多,打包时间会增加: 而且测试用例有时忘记了做相应修改,在打包时则会报错而终止打包,就很烦. 所以这时会想在打包时跳过测试,大致有2种方法: 方法一 ...
- 锐捷SNMp注意:
http://www.ruijie.com.cn/fw/wt/18855 1)设备名称.运行时间.sysOID.设备描述.联系人.设备位置:分别来自RFC-1213-MIB的system组中的sysN ...
- XXXfragment that is not a fragment错误,fragment认不出来
要注意的是fragment事实上是有两个版本号的,一个是 import android.support.v4.app.Fragment; 另外一个是 import android.app.Fragme ...