如何使用ASP.NET Core Web API实现短链接服务

前言

在前面的文章中,我们介绍了hashids.net,可以将数值型Id加密成无意义的字符串。

今天,我们来利用这一特点,实现短链接服务。

原理

短链接,顾名思义就是在形式上比较短的链接网址。借助短链接,可以用简短的网址替代原来冗长的网址,例如下例:

  • zhiurl.cn/erbDjM

但是访问这个地址,实际会打开我的公众号。

监控网络请求,发现实际发生的是302临时重定向。

562e61f7848db57bb518606263d1ab00.png

因此,可以猜测整个短链接服务的实现原理如下:

  1. 用户访问短链接,请求到达服务器;

  2. 服务器将短链接转换成为长链接,然后给浏览器返回重定向的状态码302;

  3. 浏览器拿到重定向的状态码,以及真正需要访问的地址,重定向到真正的长链接上。

实现

创建一个Web API项目,用于实现短链接服务。

首先,实现生成短链接接口:

[HttpPost("shorten")]
public string ShortenUrl([FromBody]string url)
{var id = db.Insert(url);var hashids = new Hashids("公众号My IO", minHashLength: 6);return hashids.Encode(id);
}

将长链接保存到数据库,然后将数据Id加密成字符串返回。

5c049fc0791635554bd27f0ee7f43dab.png

然后,实现短链接跳转接口:

[HttpGet("{shortUrl}")]
public IActionResult GetUrl(string shortUrl)
{var hashids = new Hashids("公众号My IO", minHashLength: 6);var id = hashids.Decode(shortUrl)[0];var urlData = db.Get(id);return Redirect(urlData.Url);
}

将短链接解码成数据Id,然后到数据库查到对应长链接。最后返回跳转状态码。

e5590331e9bf8995705aea9512d307ed.png

结论

在本文中,通过hashids.net,我们使用ASP.NET Core Web API实现了短链接服务。

如果你觉得这篇文章对你有所启发,请关注我的个人公众号”My IO“

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/292806.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

python 写入excel_一行一行整理EXCEL表太麻烦,试试python脚本,1秒写入数据

最近工作中,要整理数据,本来是以sql脚本录入,但是id、barcode等数据不好整理,因为这几个字段要唯一。所以想到用EXCEL表整理数据,再导入数据库中。整理的过程中,发现EXCEL一行一行的修改也挺麻烦&#xff0…

ORACLE 数据库安装后,PL/SQL的登录问题完美解决

windows7 64位系统 安装完oracle 后的用法如下分享链接:http://www.2cto.com/database/201307/226853.html#comment_iframe安装完PL/SQL后 。当你登陆时。你会遇到各种那个疼的问题。 例如:监听程序在CONNECT_DATA 中未获得SERVICE_NA 无监听程序 无法解…

3、AngularJS2 架构

2019独角兽企业重金招聘Python工程师标准>>> Angular 2 应用程序应用主要由以下 8 个部分组成: 1、模块 (Modules)2、组件 (Components)3、模板 (Templates)4、元数据 (Metadata)5、数据绑定 (Data Binding)6、指令 (Directives)7、服务 (Services)8、依…

Kubernetes:实现应用不停机更新

本篇主要讨论如何实现滚动更新和回滚,任意更换版本并且回滚以前的版本(版本更新),而下一章会讨论到 Pod 缩放,根据机器资源自动拓展和收缩应用(自动扩容实例)。本文为作者的 Kubernetes 系列电子书的一部分,电子书已经开源&#x…

inner join 和 exists 效率_一个in、exists、join的简单测试

创建两张表先单独插入两条数据然后批量插入部门号为10,20,30,40的数据各10499099条然后dept表也插些干扰数据测试语句开始验证in和exists和join 先比较个占比多的部门,再比较占比少的 1、 in 占比多 select count(*) from scott.EMP_TEST e where e.deptno in (sele…

httpModules 与 httpHandlers

httpModules 与 httpHandlers ASP.NET对请求处理的过程:当请求一个*.aspx文件的时候,这个请求会被inetinfo.exe进程截获,它判断文件的后缀(aspx)之后,将这个请求转交给ASPNET_ISAPI.dll,ASPNET_…

多比Web 3D展示(3D机房/3D监控)中间件多比Web 3D展示(3D机房/3D监控)中间件免费下载购买地址...

多比3D是实现3D场景搭建的软件开发包,可以创建广泛的3D应用,适用于高端制造、能源、国防军工、教育科研、城市规划及建筑环艺、生物医学等领域的虚拟仿真,应用于虚拟展示、虚拟设计、方案评审、虚拟装配、虚拟实训等工作环节。 特点与优势 支…

python 工资管理软件_智慧职教云课堂2020Python程序设计(深圳信息职业技术学院)题目答案...

智慧职教云课堂2020Python程序设计(深圳信息职业技术学院)题目答案 更新时间:2020-11-23 20:41点击: 智慧职教云课堂2020Python程序设计(深圳信息职业技术学院)题目答案 更多相关问题 【判断题】在声明类的成员属性时必须要用关键…

中国已消失的九所世界级大学

全世界只有3.14 % 的人关注了爆炸吧知识众所周知,我们国家的大学数量在世界范围内数一数二,但是有很多赫赫有名的大学却在历史中被人们遗忘,下面我们一起回顾一下那些不该被忘记的大学。>>>>▌燕京大学燕京大学(Yench…

IOS Table中Cell的重用reuse机制分析

2019独角兽企业重金招聘Python工程师标准>>> 解决代码: - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { NSString *CellIdentifier [NSString stringWithFormat:"Cell%d%d", …

VS2017/2019 F12无法导航到定义

今天对项目里某个对象点F12转到定义,无法跳转,研究了一会儿,找到如下解决方案:首先确认该函数是否能够正确被跳转到..就是是否真实定义了,然后确保要跳转的定义源码在项目文件下(而不是直接引用的DLL)接下来关闭VS2017…

unable to launch什么意思_都表示太...以至于,so … that…?与too… to …有着明显区别...

【2019年12月8日 百天英语-Day135】【华东师范大学-林森撰写】昨日内容复习提要:昨天学习了主要学习了 ①be able to …与can的区别。②如何通过不认识的单词,猜到作者表达的含义。昨天文章如下:表示有能力做某事,be able to …与…

求指教、。。。关于调用so文件

问题描述今天同事给我发来一个文件&#xff0c;说让我通过android调用里面的函数文件是&#xff1a;里面的内容是&#xff1a;call_so.cpp文件的内容&#xff1a;#pragma pack(1) //非常重要的申明&#xff0c;内存对齐的方法&#xff0c;影响sizeof()的结果#include <stdio…

人类历史上最伟大的物理学家

全世界只有3.14 % 的人关注了爆炸吧知识一沙见世界 一花窥天堂手心握无限 须臾纳永恒杨振宁曾说读上面的四句诗可以感受到物理的美但物理的美不止于此物理还有一种庄严美一种神秘美一种初窥宇宙奥秘的畏惧美物理就是如此的迷人任何语言在它的面前都很贫瘠数学让人摆脱了愚昧而…

DevToys - 开发人员的瑞士军刀

DevToys 是一个适用于开发人员的工具箱, 基于 UWP 开发, DevToys 旨在拥抱 Windows 生态系统, 免费并且开源, 拥有现代化的界面, 支持中文, 有深色/浅色主题可选, 并且它是离线化的, 所以你完全可以在无网络环境中使用。你可以使用它处理与开发相关的一些任务, 它提供 了14…

python写小猪佩奇_python之小猪佩奇

该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 小猪佩奇 &#xff08;源码有点长&#xff09;# coding:utf-8 import turtle as t t.pensize(4) t.hideturtle() t.colormode(255) t.color((255,155,192),"pink") t.setup(840,500) t.speed(10) #鼻子 t.pu() t.goto(-…

你和985硕博研究生,差了这些东西

全世界只有3.14 % 的人关注了爆炸吧知识明明都是在搞科研为什么别人的思路比你开阔&#xff1f;明明都是在写文章为什么别人的方向比你更新颖&#xff1f;今天小编就来推荐几个能拓展视野的公号快点收藏起来吧&#xff01;募格课堂ID&#xff1a;mugeketang推荐理由&#xff1a…