缩短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; ...
随机推荐
- Java-List泛型的用处(能够使用传入泛型对象的方法)
List<PageData> varList = setMealService.list(page); for(int i = 0;i < varList.size(); i++){ ...
- 旋转图css3
<!doctype html><html> <head> <meta charset="UTF-8"> <title> ...
- java方法:flush()
flush本意是冲刷,这个方法大概取自它引申义冲马桶的意思,马桶有个池子,你往里面扔东西,会暂时保存在池子里,只有你放水冲下去,东西才会进入下水道. 同理很多流都有一个这样的池子,专业术语叫缓冲区,当 ...
- POJ 2031 Building a Space Station 最小生成树模板
题目大意:在三维坐标中给出n个细胞的x,y,z坐标和半径r.如果两个点相交或相切则不用修路,否则修一条路连接两个细胞的表面,求最小生成树. 题目思路:最小生成树树模板过了,没啥说的 #include& ...
- RING0,RING1,RING2,RING3
Intel的CPU将特权级别分为4个级别:RING0,RING1,RING2,RING3.Windows只使用其中的两个级别RING0和RING3,RING0只给操作系统用,RING3谁都能用.如果普 ...
- MP3拷贝程序---字节流
package cn.itcast.p7.io.bytestream.test; import java.io.BufferedInputStream; import java.io.Buffered ...
- FTP: Configuring server users..
4 points to create a user to uploade to ftproot.. this user must be an administrator, and be able to ...
- 解析GenericOptionsParser
hadoop源代码分析(4)-org.apache.hadoop.util包-GenericOptionsParser类[原创] 一 准备 hadoop版本:1.0.3,GenericOptio ...
- ZooKeeper应用理论及其应用场景
ZooKeeper Client APIZooKeeper Client Library提供了丰富直观的API供用户程序使用,下面是一些常用的API: ● create(path, data, fla ...
- Chapter 1 First Sight——18
But at least he sent me to an empty desk at the back without introducing me to the class. 但是最后他给我最后面 ...