mvc url路由參數的加密和解密

來源:互聯網
上載者:User

標籤:

   查看某個資訊的時候一般會在url上加上該資訊在資料庫中對應的主鍵id(而且一般是自增的)

url是這樣子的 xxxDetail/1 , 雖然對於我們開發人員來說可以這種顯式的資料庫主鍵會方便調試過程,但是這種url的安全性比較低

所以想將這類id給加密了, 當然也不想在需要此處理的地方 添加上加密或解密的代碼;

 

基於mvc的路由機制我們可以很方便的將 輸出的url和輸入的url參數進行自動的加密和解密:

一、通過擴充UrlHelper方法, 對參數進行加密

 1    public static class UrlExtensions 2     { 3         /// <summary> 4         /// UrlHelper擴充方法 5         /// </summary> 6         /// <param name="helper"></param> 7         /// <param name="id">需要進行加密的參數</param> 8         /// <returns></returns> 9         public static string RouteEncodedParameter(this UrlHelper helper, string id)10         {11             //將參數進行加密(在參數前面加"aa")            12             id = "aa" + id;13             return helper.RouteUrl("default", new { id = id });14         }15     }

二、通過實現IRouteHandler介面的GetHttpHandler方法, 截取RequestContext將其中的參數進行解密後繼續傳遞給MvcHandler處理

 1  public class RouteConfig 2     { 3         public static void RegisterRoutes(RouteCollection routes) 4         { 5             routes.IgnoreRoute("{resource}.axd/{*pathInfo}"); 6             // 預設值 7             RouteValueDictionary defaults = new RouteValueDictionary(); 8             defaults.Add("controller", "Home"); 9             defaults.Add("action", "Index");10             defaults.Add("id", "aa11");             11 12             // 註冊路由,並指定自訂的路由處理器13             routes.Add("default", new Route("{controller}/{action}/{id}"14                             , defaults15                             , new GetEncodedIdRouteHandler()));16 17         }18     }19 20     /// <summary>21     /// 在路由處理器中修改參數值22     /// </summary>23     public class GetEncodedIdRouteHandler : IRouteHandler24     {25         public IHttpHandler GetHttpHandler(RequestContext requestContext)26         {27             // 在這裡可以對參數解密28             // 這裡只是將開頭的aa給去除29             string id = requestContext.RouteData.Values["id"] == null ? "" : requestContext.RouteData.Values["id"].ToString().TrimStart(‘a‘);30             requestContext.RouteData.Values["id"] = id;31             return new MvcHandler(requestContext);32         }33     }

以上,我們就圍繞asp.net的路由機制, 對路由參數進行了加密和解密操作; 然後action裡邊的參數擷取的就是真實的資料庫主鍵了

如下 @Url.RouteEncodedParameter("2") 產生的url ,在action中擷取的就直接是解密後的真實參數了

 

ps: 解密的切入口 個人覺得只要是在action的模型繫結之前, 都是可以的

源碼下載

 

mvc url路由參數的加密和解密

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.