之前给合作方二维码时隐藏的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短地址链接的更多相关文章

  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. 【贪心】 poj 1032 和为n的若干数最大乘积

    给出n,把n分解为若干不相同数之和,使之乘积最大.贪心,Discuss里面的思路:把n分解为从2开始的连续整数,如果有多,则从高位开始依次加1.如26,我们得到2+3+4+5+6,此时还剩余6(26- ...

  2. Java利用POI生成Excel强制换行

    前一段时间在做一个学校排课系统时,有一个地方需要利用把课程表生成excel汇出给客户,由于之前用excel都只是简单的应用,在单元格里都是用自动换行,而这次可能需要用到手动强制换行. 于是我在网上找了 ...

  3. 【转】使用ThinkPHP必须掌握的调试方法

    经常看到有人问到findAll的返回数据类型是什么之类的问题,以及出错了不知道什么原因的情况,其实还是没有熟悉ThinkPHP内置的调试手段和方法,抛开IDE本身自带的调试方式不说,如果你正在用或者打 ...

  4. 删除 win8.1中的网络1,网络2,宽带连接1,宽带连接2等网络记录

    新建txt文本,保存如下内容为reg文档: Windows Registry Editor Version 5.00 [-HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\W ...

  5. UIImage 和 UIImageView区别

    // // ViewController.m // 06-UIImage 和 UIImageView // // Created by Stephen on 16/4/18. // Copyright ...

  6. LINUX中磁盘挂载与卸除

    一.挂载格式与参数说明: 要将文件系统挂载到我们的 Linux 系统上,就要使用 mount 这个命令啦! 不过,这个命令真的是博大精深-粉难啦!我们学简单一点啊- ^_^ [root@www ~]# ...

  7. RedHat Enterprise Linux AS4&5 安装gcc过程

    三.Gcc安装方法(redhat 4): 一.安装步骤 1.使用which gcc命令查看gcc是否安装安装 2.如若没有安装则下载如下安装包,所需安装包如下 一共需要拷贝以下五个安装包: binut ...

  8. php使用curl提交xml数据

    $xml_data ='<xml> <return_code><![CDATA[SUCCESS]]></return_code> <return_ ...

  9. BD string 百度之星初赛的题目 数学

    http://acm.hdu.edu.cn/showproblem.php?pid=5694 可以说这道题目挺考验思维含量的吧 首先,这个和数位dp是差不多的方法,计算cal(l)-cal(l-1): ...

  10. hql 链接查询

    第一部分.连接查询 一.内连接 内连接查询操作列出与连接条件匹配的数据行,它使用比较运算符比较被连接列的列值.内连接分三种: 1.等值连接:在连接条件中使用等于号(=)运算符比较被连接列的列值,其查询 ...