mvc url路由参数的加密和解密

时间:2022-03-20 21:11:43

  查看某个信息的时候一般会在url上加上该信息在数据库中对应的主键id(而且一般是自增的)

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中获取的就直接是解密后的真实参数了

aaarticlea/png;base64,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wGxI09TYmDx1auq0aRnp6R988IHJZLrXUE+qmVpbN7z7bkZ6+rSUlGemT29qbFRuv55qmfmh6V7jpIkTs+bNy5o3b9LEiWRz2YXSXbtXzy80m0yVFRXf3b/f9vAhjam1de07ax8+eNB4r0nKwwcP1r6z1tTaKtqKcHpV0D9M3l3HLandPSUo6B8YJu+pFdan13JbUQun7K6lGxT/HLTqdLu6Pr1KYUjlq7h+2x7e+3zdsrx1JxofPmx7+NC4e1neMjF7qtgNq3bLLBTSeGJd3rLdRn7Jvc/XUa3trhLUl23w3okCufYlLROq9ixbVnDiHr/k3okCfvDrPr/HVzbuXiZoQdKRcTd/KETD45fLDa/xxDrRjoj7kjRObbLu83uC34JS18bdgj36+m3+7eofpDyZ/9fKo0ePHj58+OjRo2cqK2/euNH01SdrFi9elpubt2xZwYl7ggFQR0mwSnD0OKSHnR2D6AaGSskYGhsddvuDH3+U3RwArxLUUFd7r662vramvramvq6mobb2Xn395Ytfln9+4sqlSy2N9+pra+rrauvraupraxpqaxpqaxtqa0ll/s9abm1NQ21NfW3Nvfq6wweLX8558S97drc2N7F1auvrahtqa1qbmz54//2c7EUlB4sbuN5raxvqahpqa+traxvIx9oafhXbV2ND3eSJE+bPmzt/3tzJEyc01tc31NbcqxcsvFdfzw2J3jXSDmnc1NJcUX7qvt328McfaFqbm95+660HP/xdibffequ1uUm0FfA2xl25ryz7s1HrYeh/eLd3bOCUszHlmY8qTh8t/fTwwYNHSz+trDh94/pXjQ31dqvlx79/3zljOL/2tUotxgCAEkENtdUNtdX1d6sbau401FTX19ypr6luuVfX0ljffK+uoaa6vqa6vqa6oYbUqW6oqW64W01qNtTcabhb3XC3ur6muv7unYa7zOb1NdUNd6ub79Wbmxtb7tU33L3DtcM0VVPdeq/e0tzUcq+uoeYO1zv7Z3XD3TsNd+8wHfFrq+trqhtra56aOP65menPzUx/auL4xtq7DTXVjXXChXV3G+7eaai5QzdOxtZQc6e+5k59zR1T073K8pPf2SwP//4dTWtjw+srX31t+StK/Om1la2NDaKtgJe5+GHukvWf1Wg9DB8Y3u3t/BNStr20pLL81NFPDx8u/uTop4cry0/d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" alt="" />

ps: 解密的切入口 个人觉得只要是在action的模型绑定之前, 都是可以的

源码下载