.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( ...
随机推荐
- 中文版 R-FCN: Object Detection via Region-based Fully Convolutional Networks
R-FCN: Object Detection via Region-based Fully Convolutional Networks 摘要 我们提出了基于区域的全卷积网络,以实现准确和高效的目标 ...
- 3ds Max制作碗实例教程
一. 碗的建模.模型的结果如图WB—1所示: 图WB—1 1. 创建圆柱,并调节参数,转换到多边形,最终的结果图WB—2所示: 图WB—2 2.使用Inset(插入)插入一个面,再次执行Extrude ...
- Ncomputering 安装及参数设置
1.加域 2.添加用户:系统属性---远程
- NodeJS学习笔记 (8)网络服务-http-server(ok)
http服务端概览 创建server 几行代码搞定 var http = require('http'); var requestListener = function(req, res){ res. ...
- Java XSSF 导出excel 工具类
参数解释: title:导出excel标题.headers 导出到excel显示的列头. columns 对应数据库字段 .list 导出数据1.pox中添加依赖 <dependency> ...
- wackoPicko 渗透平台的安装
2016-05-17 wackoPicko 的介绍及下载地址 https://github.com/adamdoupe/WackoPicko#from=codefrom.com 首先我们 ...
- Ibatis使用技巧
一.在ibatis中以Map形式返回查询结果 1.在ibatis的配置文件中配置以HashMap返回的resultMap <resultMap id="MAX_MIN_ID_RESUL ...
- JAVA关于byte数组与String转换的问题
1 public class ToString{ public static void main(String[] args){ String aa = "hellow"; byt ...
- Swift中实现Array数组和NSArray数组的相互转换与遍历
Array是Swift中的数组数据类型.而NSArray是OC中的数组数据类型.两者有差别有联系.在Swift中有时候难免会使用到OC中的一些东西.今天我们就来Swift中使用NSArray和Arra ...
- Dubbo分布式服务框架入门(附project)
要想了解Dubbo是什么,我们不防先了解它有什么用. 使用场景:比方我想开发一个网上商城项目.这个网上商城呢,比較复杂.分为pc端web管理后台.微信端销售公众号,那么我们分成四个项目,pc端站点,微 ...