之前给合作方二维码时隐藏的url过长,导致合作方提出在打印的时候打印不出来的问题,要求url长度在50字节内,所以写了缩短url功能。

  1. var url = string.Format("{0}/Billing/ScanCode?TenantId={1}&BussinessType={2}&groupNumber={3}&DeviceId={4}", baseUrl, args.TenantId, (int)BussinessType.SyncTransaction, groupNumber, device.Id);
  2.  
  3. //过长的url 优化成短url
  4. var creatShotUrl = string.Format("/Billing/ScanCode?TenantId={0}&BussinessType={1}&groupNumber={2}&DeviceId={3}", args.TenantId, (int)BussinessType.SyncTransaction, groupNumber, device.Id);
  5. var invoiceUrlRepository = RF.Concrete<InvoiceUrlRepository>();
  6. InvoiceUrl model = new InvoiceUrl();
  7. string id = CommonShortUrl.GetShorturl(creatShotUrl, );
  8. url = baseUrl + "/t?e=" + id;

再添加一个控制器

  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Web;
  5. using System.Web.Mvc;
  6. using Rafy.Domain;
  7. namespace DBI.SaaS.Web.Controllers
  8. {
  9. public class TController : Controller
  10. {
  11.  
  12. // GET: InvoiceUrl
  13. /// <summary>
  14. /// 根据短url的key 获取 真实的url 并跳转
  15. /// </summary>
  16. /// <param name="urlKey">短url的key</param>
  17. /// <returns></returns>
  18. [Route("c/{e:maxlength(15)}")]
  19. public ActionResult Index(string e)
  20. {
  21. if (!string.IsNullOrEmpty(e))
  22. {
  23. long id = CommonShortUrl.UnShort(e);
  24. var invoiceUrlRepository = RF.Concrete<InvoiceUrlRepository>();
  25. //查询
  26. var q = new CommonQueryCriteria();
  27. var model = invoiceUrlRepository.GetById(id);
  28. if (model == null)
  29. {
  30. return Content("不存在的url!");
  31. }
  32. return Redirect(model.UrlValue);
  33. }
  34. else
  35. {
  36. return Content("参数错误!");
  37. }
  38. }
  39. }
  40. }

缩短url控制器代码

  1. using Rafy.Domain;
  2. using System;
  3. using System.Collections.Generic;
  4. using System.Linq;
  5. using System.Web;
  6.  
  7. namespace DBI.SaaS.Web.Controllers
  8. {
  9. public class CommonShortUrl
  10. {
  11. static string Number = "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ";
  12.  
  13. ///
  14. /// 压缩ID标识
  15. ///
  16. ///
  17. ///
  18. public static string Short(long n)
  19. {
  20. string result = string.Empty;
  21. int l = Number.Length;
  22. while (n / l >= )
  23. {
  24. result = Number[(int)(n % l)] + result;
  25. n /= l;
  26. }
  27. result = Number[(int)n] + result;
  28. return result;
  29. }
  30.  
  31. ///
  32. /// 还原ID标识
  33. ///
  34. ///
  35. ///
  36. public static long UnShort(string s)
  37. {
  38. long result = ;
  39. s = s.Trim();
  40. int l = s.Length;
  41. int m = Number.Length;
  42. for (int x = ; x < l; x++)
  43. {
  44. result += Number.IndexOf(s[l - - x]) * (long)Math.Pow(m, x);
  45. }
  46. return result;
  47. }
  48.  
  49. /// <summary>
  50. /// 简化 url
  51. /// </summary>
  52. /// <param name="paramUrl"></param>
  53. /// <returns></returns>
  54. public static string GetShorturl(string paramUrl,int urlType)
  55. {
  56. //过长的url 优化成短url
  57. var invoiceUrlRepository = RF.Concrete<InvoiceUrlRepository>();
  58. InvoiceUrl insertModel = new InvoiceUrl();
  59. insertModel.UrlValue = paramUrl;
  60. insertModel.UrlType = urlType;
  61. invoiceUrlRepository.Save(insertModel);
  62. return CommonShortUrl.Short(insertModel.Id);
  63. }
  64. }
  65. }

这样缩短后的url地址:http://www.***.com/t?e=***

缩短url-url短地址链接的更多相关文章

  1. URL压缩算法的短地址

    时下,短网址应用已经在全国各大微博上開始流行了起来.比如QQ微博的url.cn,新郎的t.cn等. 我们在新浪微博上公布网址的时候.微博会自己主动判别网址.并将其转换,比如:http://t.cn/h ...

  2. C#如何实现url短地址?C#短网址压缩算法与短网址原理入门

    c# url短地址压缩算法与短网址原理的例子,详细介绍了短网址的映射算法,将长网址md5生成32位签名串,分为4段,每段8个字节,然后生成短网址,具体见文本实例. 短网址映射算法: 将长网址md5生成 ...

  3. 【转】C# URL短地址压缩算法及短网址原理解析

    这篇文章主要介绍了C# URL短地址压缩算法及短网址原理解析,本文重点给出了算法代码,需要的朋友可以参考下 短网址应用已经在全国各大微博上开始流行了起来.例如QQ微博的url.cn,新郎的sinaur ...

  4. URL短地址压缩算法 微博短地址原理解析 (Java实现)

    原博客地址:http://blog.csdn.net/xyz_lmn/article/details/8057270 最近,项目中需要用到短网址(ShortUrl)的算法,于是在网上搜索一番,发现有C ...

  5. 【转】URL短地址压缩算法 微博短地址原理解析 (Java实现)

    转自: URL短地址压缩算法 微博短地址原理解析 (Java实现) 最近,项目中需要用到短网址(ShortUrl)的算法,于是在网上搜索一番,发现有C#的算法,有.Net的算法,有PHP的算法,就是没 ...

  6. url.cn短网址批量缩短开发接口

    https://www.showapi.com/api/view/1728 //md5签名方式--非简单签名 <?php header("Content-Type:text/html; ...

  7. 用PHP实现URL转换短网址的算法示例

    短网址就是把一个长的地址转换在超级短的网址,然后访问短网址即可跳转到长网址了,下面来看用PHP实现URL转换短网址的算法与例子. 短网址(Short URL) ,顾名思义就是在形式上比较短的网址.在W ...

  8. mvc中多参数URL会很长,首次加载不传参数让url很短,路由规则实现方法[bubuko.com]

    如要实现列表中地址全路径“bubuko-11-2.html”,在首次进入时,使用短路径“bubuko.html”,只有再次href后才显示全路径“bubuko-11-2.html”,下面使用路由规则来 ...

  9. 爪哇国新游记之二十八----从url指定的地址下载文件到本地

    package download; import java.io.File; import java.io.FileOutputStream; import java.io.InputStream; ...

随机推荐

  1. 关于Winform中的用户代理

    问题描述: Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident/4.0; .NET CLR 解释: 1. 应用程序版本“Mozilla ...

  2. 网站网址前的小logo

    认识网页前小图标 1.能在浏览器标签.地址栏左边和收藏夹栏显示小图标的网站,其网站都是使用了其名称为"favicon.ico"图标文件,格式为ico格式,图标大小一般为16*16, ...

  3. Haproxy的安装和配置示例

    1.ha proxy简介ha proxy是一个开源的,高性能的,基于tcp第四层和http第七层应用的负载均衡软件优点:可靠性和稳定性非常好          最高可以同时维护40000-50000个 ...

  4. Servlet事件监听器

    监听器就是一个实现特定接口的普通java程序,这个程序专门用于监听另一个java对象的方法调用或属性改变,当被监听对象发生上述事件后,监听器某个方法将立即被执行. 面试题:请描述一下java事件监听机 ...

  5. boost库之geometry

    环境:win732位旗舰版.VS2010旗舰版.boost 1.55.0版本.坐标系为MM_TEXT Geometry是一个开源的几何计算库,包含了几何图形最基本的操作(也支持复杂的操作),下面我们看 ...

  6. C 汇编代码 函数调用指令和栈平衡

    1. CALL指令: CALL指令可不是如唤指令,而是子程序调用指令.那么汇编语言中的子程序是什么呢?子程序能被其它程序调用,在实现某种功能后能自动返回到调用程序去的程序.其最后一条指令一定是返回指令 ...

  7. Python 文件Hash(MD5,SHA1)

    import hashlib import os,sys   def CalcSha1(filepath):     with open(filepath,'rb') as f:         sh ...

  8. parseint和parsefloat总结number。隐形转换

    parseint:会认识一些字符+.-.空格,其他的就会截止譬如23hudhchauch结果为:23,对于boollen类型不能转换为1或是0. number:是对整体的转换.对true的转换为1. ...

  9. Node.js学习 - Global Object

    全局对象:特殊的对象,它及其所有属性都可以在程序的任何地方访问. __filename 表示当前正在执行的脚本的文件名.它将输出文件所在位置的绝对路径,且和命令行参数所指定的文件名不一定相同. 如果在 ...

  10. linux下安装rabbitmq

    1.安装erlang虚拟机 Rabbitmq基于erlang语言开发,所有需要安装erlang虚拟机.安装erlang有两种方式: 第一种:使用yum安装: wget -O /etc/yum.repo ...