mvc url路由参数的加密和解密
2015-02-10 20:00
501 查看
查看某个信息的时候一般会在url上加上该信息在数据库中对应的主键id(而且一般是自增的)
url是这样子的 xxxDetail/1 , 虽然对于我们开发人员来说可以这种显式的数据库主键会方便调试过程,但是这种url的安全性比较低
所以想将这类id给加密了, 当然也不想在需要此处理的地方 添加上加密或解密的代码;
基于mvc的路由机制我们可以很方便的将 输出的url和输入的url参数进行自动的加密和解密:
一、通过扩展UrlHelper方法, 对参数进行加密
二、通过实现IRouteHandler接口的GetHttpHandler方法, 截取RequestContext将其中的参数进行解密后继续传递给MvcHandler处理
以上,我们就围绕asp.net的路由机制, 对路由参数进行了加密和解密操作; 然后action里边的参数获取的就是真实的数据库主键了
如下 @Url.RouteEncodedParameter("2") 生成的url ,在action中获取的就直接是解密后的真实参数了
ps: 解密的切入口 个人觉得只要是在action的模型绑定之前, 都是可以的
源码下载
url是这样子的 xxxDetail/1 , 虽然对于我们开发人员来说可以这种显式的数据库主键会方便调试过程,但是这种url的安全性比较低
所以想将这类id给加密了, 当然也不想在需要此处理的地方 添加上加密或解密的代码;
基于mvc的路由机制我们可以很方便的将 输出的url和输入的url参数进行自动的加密和解密:
一、通过扩展UrlHelper方法, 对参数进行加密
public static class UrlExtensions { /// <summary> /// UrlHelper扩展方法 /// </summary> /// <param name="helper"></param> /// <param name="id">需要进行加密的参数</param> /// <returns></returns> public static string RouteEncodedParameter(this UrlHelper helper, string id) { //将参数进行加密(在参数前面加"aa") id = "aa" + id; return helper.RouteUrl("default", new { id = id }); } }
二、通过实现IRouteHandler接口的GetHttpHandler方法, 截取RequestContext将其中的参数进行解密后继续传递给MvcHandler处理
public class RouteConfig { public static void RegisterRoutes(RouteCollection routes) { routes.IgnoreRoute("{resource}.axd/{*pathInfo}"); // 默认值 RouteValueDictionary defaults = new RouteValueDictionary(); defaults.Add("controller", "Home"); defaults.Add("action", "Index"); defaults.Add("id", "aa11"); // 注册路由,并指定自定义的路由处理器 routes.Add("default", new Route("{controller}/{action}/{id}" , defaults , new GetEncodedIdRouteHandler())); } } /// <summary> /// 在路由处理器中修改参数值 /// </summary> public class GetEncodedIdRouteHandler : IRouteHandler { public IHttpHandler GetHttpHandler(RequestContext requestContext) { // 在这里可以对参数解密 // 这里只是将开头的aa给去除 string id = requestContext.RouteData.Values["id"] == null ? "" : requestContext.RouteData.Values["id"].ToString().TrimStart('a'); requestContext.RouteData.Values["id"] = id; return new MvcHandler(requestContext); } }
以上,我们就围绕asp.net的路由机制, 对路由参数进行了加密和解密操作; 然后action里边的参数获取的就是真实的数据库主键了
如下 @Url.RouteEncodedParameter("2") 生成的url ,在action中获取的就直接是解密后的真实参数了
ps: 解密的切入口 个人觉得只要是在action的模型绑定之前, 都是可以的
源码下载
相关文章推荐
- mvc url路由参数的加密和解密
- 利用MVC的过滤器实现url的参数加密和解密
- 利用MVC的过滤器实现url的参数加密和解密
- 利用MVC的过滤器实现url的参数加密和解密
- 利用MVC的过滤器实现url的参数加密和解密
- mvc路由设置参数配置类似于url重写
- 实现URL参数的加密和解密的方法 .
- WEB系统中加密\解密URL传输参数(EIP.Framework中的实现)
- asp.net URL参数加密解密的问题
- 学习URL传输参数加密解密
- 实现URL参数的加密和解密的方法
- javascript将url中的参数加密解密代码
- URL参数加密解密(java版)
- javascript将url中的参数加密解密代码
- URL参数加密解密(java版)
- WEB系统中加密/解密URL传输参数.
- mvc中多参数URL会很长,首次加载不传参数让url很短,路由规则实现方法[bubuko.com]
- 给URL地址栏中的参数加密/解密
- URL地址栏中的参数加密\解密
- 对url参数后的value进行 加密解密