缩短url-url短地址链接
之前给合作方二维码时隐藏的url过长,导致合作方提出在打印的时候打印不出来的问题,要求url长度在50字节内,所以写了缩短url功能。
- var url = string.Format("{0}/Billing/ScanCode?TenantId={1}&BussinessType={2}&groupNumber={3}&DeviceId={4}", baseUrl, args.TenantId, (int)BussinessType.SyncTransaction, groupNumber, device.Id);
- //过长的url 优化成短url
- var creatShotUrl = string.Format("/Billing/ScanCode?TenantId={0}&BussinessType={1}&groupNumber={2}&DeviceId={3}", args.TenantId, (int)BussinessType.SyncTransaction, groupNumber, device.Id);
- var invoiceUrlRepository = RF.Concrete<InvoiceUrlRepository>();
- InvoiceUrl model = new InvoiceUrl();
- string id = CommonShortUrl.GetShorturl(creatShotUrl, );
- url = baseUrl + "/t?e=" + id;
再添加一个控制器
- using System;
- using System.Collections.Generic;
- using System.Linq;
- using System.Web;
- using System.Web.Mvc;
- using Rafy.Domain;
- namespace DBI.SaaS.Web.Controllers
- {
- public class TController : Controller
- {
- // GET: InvoiceUrl
- /// <summary>
- /// 根据短url的key 获取 真实的url 并跳转
- /// </summary>
- /// <param name="urlKey">短url的key</param>
- /// <returns></returns>
- [Route("c/{e:maxlength(15)}")]
- public ActionResult Index(string e)
- {
- if (!string.IsNullOrEmpty(e))
- {
- long id = CommonShortUrl.UnShort(e);
- var invoiceUrlRepository = RF.Concrete<InvoiceUrlRepository>();
- //查询
- var q = new CommonQueryCriteria();
- var model = invoiceUrlRepository.GetById(id);
- if (model == null)
- {
- return Content("不存在的url!");
- }
- return Redirect(model.UrlValue);
- }
- else
- {
- return Content("参数错误!");
- }
- }
- }
- }
缩短url控制器代码
- using Rafy.Domain;
- using System;
- using System.Collections.Generic;
- using System.Linq;
- using System.Web;
- namespace DBI.SaaS.Web.Controllers
- {
- public class CommonShortUrl
- {
- static string Number = "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ";
- ///
- /// 压缩ID标识
- ///
- ///
- ///
- public static string Short(long n)
- {
- string result = string.Empty;
- int l = Number.Length;
- while (n / l >= )
- {
- result = Number[(int)(n % l)] + result;
- n /= l;
- }
- result = Number[(int)n] + result;
- return result;
- }
- ///
- /// 还原ID标识
- ///
- ///
- ///
- public static long UnShort(string s)
- {
- long result = ;
- s = s.Trim();
- int l = s.Length;
- int m = Number.Length;
- for (int x = ; x < l; x++)
- {
- result += Number.IndexOf(s[l - - x]) * (long)Math.Pow(m, x);
- }
- return result;
- }
- /// <summary>
- /// 简化 url
- /// </summary>
- /// <param name="paramUrl"></param>
- /// <returns></returns>
- public static string GetShorturl(string paramUrl,int urlType)
- {
- //过长的url 优化成短url
- var invoiceUrlRepository = RF.Concrete<InvoiceUrlRepository>();
- InvoiceUrl insertModel = new InvoiceUrl();
- insertModel.UrlValue = paramUrl;
- insertModel.UrlType = urlType;
- invoiceUrlRepository.Save(insertModel);
- return CommonShortUrl.Short(insertModel.Id);
- }
- }
- }
这样缩短后的url地址:http://www.***.com/t?e=***
缩短url-url短地址链接的更多相关文章
- URL压缩算法的短地址
时下,短网址应用已经在全国各大微博上開始流行了起来.比如QQ微博的url.cn,新郎的t.cn等. 我们在新浪微博上公布网址的时候.微博会自己主动判别网址.并将其转换,比如:http://t.cn/h ...
- C#如何实现url短地址?C#短网址压缩算法与短网址原理入门
c# url短地址压缩算法与短网址原理的例子,详细介绍了短网址的映射算法,将长网址md5生成32位签名串,分为4段,每段8个字节,然后生成短网址,具体见文本实例. 短网址映射算法: 将长网址md5生成 ...
- 【转】C# URL短地址压缩算法及短网址原理解析
这篇文章主要介绍了C# URL短地址压缩算法及短网址原理解析,本文重点给出了算法代码,需要的朋友可以参考下 短网址应用已经在全国各大微博上开始流行了起来.例如QQ微博的url.cn,新郎的sinaur ...
- URL短地址压缩算法 微博短地址原理解析 (Java实现)
原博客地址:http://blog.csdn.net/xyz_lmn/article/details/8057270 最近,项目中需要用到短网址(ShortUrl)的算法,于是在网上搜索一番,发现有C ...
- 【转】URL短地址压缩算法 微博短地址原理解析 (Java实现)
转自: URL短地址压缩算法 微博短地址原理解析 (Java实现) 最近,项目中需要用到短网址(ShortUrl)的算法,于是在网上搜索一番,发现有C#的算法,有.Net的算法,有PHP的算法,就是没 ...
- url.cn短网址批量缩短开发接口
https://www.showapi.com/api/view/1728 //md5签名方式--非简单签名 <?php header("Content-Type:text/html; ...
- 用PHP实现URL转换短网址的算法示例
短网址就是把一个长的地址转换在超级短的网址,然后访问短网址即可跳转到长网址了,下面来看用PHP实现URL转换短网址的算法与例子. 短网址(Short URL) ,顾名思义就是在形式上比较短的网址.在W ...
- mvc中多参数URL会很长,首次加载不传参数让url很短,路由规则实现方法[bubuko.com]
如要实现列表中地址全路径“bubuko-11-2.html”,在首次进入时,使用短路径“bubuko.html”,只有再次href后才显示全路径“bubuko-11-2.html”,下面使用路由规则来 ...
- 爪哇国新游记之二十八----从url指定的地址下载文件到本地
package download; import java.io.File; import java.io.FileOutputStream; import java.io.InputStream; ...
随机推荐
- 关于Winform中的用户代理
问题描述: Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident/4.0; .NET CLR 解释: 1. 应用程序版本“Mozilla ...
- 网站网址前的小logo
认识网页前小图标 1.能在浏览器标签.地址栏左边和收藏夹栏显示小图标的网站,其网站都是使用了其名称为"favicon.ico"图标文件,格式为ico格式,图标大小一般为16*16, ...
- Haproxy的安装和配置示例
1.ha proxy简介ha proxy是一个开源的,高性能的,基于tcp第四层和http第七层应用的负载均衡软件优点:可靠性和稳定性非常好 最高可以同时维护40000-50000个 ...
- Servlet事件监听器
监听器就是一个实现特定接口的普通java程序,这个程序专门用于监听另一个java对象的方法调用或属性改变,当被监听对象发生上述事件后,监听器某个方法将立即被执行. 面试题:请描述一下java事件监听机 ...
- boost库之geometry
环境:win732位旗舰版.VS2010旗舰版.boost 1.55.0版本.坐标系为MM_TEXT Geometry是一个开源的几何计算库,包含了几何图形最基本的操作(也支持复杂的操作),下面我们看 ...
- C 汇编代码 函数调用指令和栈平衡
1. CALL指令: CALL指令可不是如唤指令,而是子程序调用指令.那么汇编语言中的子程序是什么呢?子程序能被其它程序调用,在实现某种功能后能自动返回到调用程序去的程序.其最后一条指令一定是返回指令 ...
- Python 文件Hash(MD5,SHA1)
import hashlib import os,sys def CalcSha1(filepath): with open(filepath,'rb') as f: sh ...
- parseint和parsefloat总结number。隐形转换
parseint:会认识一些字符+.-.空格,其他的就会截止譬如23hudhchauch结果为:23,对于boollen类型不能转换为1或是0. number:是对整体的转换.对true的转换为1. ...
- Node.js学习 - Global Object
全局对象:特殊的对象,它及其所有属性都可以在程序的任何地方访问. __filename 表示当前正在执行的脚本的文件名.它将输出文件所在位置的绝对路径,且和命令行参数所指定的文件名不一定相同. 如果在 ...
- linux下安装rabbitmq
1.安装erlang虚拟机 Rabbitmq基于erlang语言开发,所有需要安装erlang虚拟机.安装erlang有两种方式: 第一种:使用yum安装: wget -O /etc/yum.repo ...