【愚公系列】2022年03月 .NET CORE工具案例-短链接服务

简介: 【愚公系列】2022年03月 .NET CORE工具案例-短链接服务

前言

短链接,通俗来说,就是将长的URL网址,通过程序计算等方式,转换为简短的网址字符串。


短链接的优点:


1、短


通过短链接功能用简短的网址替代原来冗长的网址,缩短了短信长度,降低成本。短信是按照内容的长短来收费的,短一点的链接既美观也省钱。


2、强大的数据功能


在短信中置入短链接,可以对短信的点击效果进行统计分析,进而能够判定短信发送的效果如何,为会员运营及精细化管理提供辅助依据。


3、提高购买率


短信中带上短链接,用户可以直接点击到达相应的页面,操作比较方便,更有利于顾客进行购买。


短链接服务的实现原理如下:


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


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


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


一、ID加密成字符串

1.自定义序列化

在输出时,我们需要自动加密Id。


在这里,通过编写一个自定义JsonConverter来实现:


public class HashIdJsonConverter : JsonConverter<int>
{
    Hashids hashids = new Hashids("愚公公众号");//加盐
    public override int Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options)
    {
        var str = JsonSerializer.Deserialize<string>(ref reader, options);
        return hashids.Decode(str)[0];
    }
    public override void Write(Utf8JsonWriter writer, int value, JsonSerializerOptions options)
    {
        JsonSerializer.Serialize(writer, hashids.Encode(value), options);
    }
}

运行


public class UserDto
{
    [JsonConverter(typeof(HashIdJsonConverter))]
    public int Id { get; set; }
    public string Name { get; set; }
}
[HttpGet]
public IEnumerable<UserDto> Get()
{
    return new[] { new UserDto { Id = 12345, Name = "用户12345" } };
}

2.自定义模型绑定

编写一个自定义IModelBinder来实现:


public class HashIdModelBinder : IModelBinder
{
    Hashids hashids = new Hashids("公众号My IO");//加盐
    public Task BindModelAsync(ModelBindingContext bindingContext)
    {
        var modelName = bindingContext.ModelName;
        var valueProviderResult = bindingContext.ValueProvider.GetValue(modelName);
        var str = valueProviderResult.FirstValue;
        bindingContext.Result = ModelBindingResult.Success(hashids.Decode(str)[0]);
        return Task.CompletedTask;
    }
}

运行


[HttpGet("{id}")]
public  UserDto Get([ModelBinder(typeof(HashIdModelBinder))]int id)
{
    return new UserDto { Id = id, Name = "用户"+id }  ;
}

二、短链接服务

Web API实现生成短链接接口:


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

短链接跳转接口:


[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,然后到数据库查到对应长链接。最后返回跳转状态码。

相关文章
|
26天前
|
开发框架 .NET 开发者
简化 ASP.NET Core 依赖注入(DI)注册-Scrutor
Scrutor 是一个简化 ASP.NET Core 应用程序中依赖注入(DI)注册过程的开源库,支持自动扫描和注册服务。通过简单的配置,开发者可以轻松地从指定程序集中筛选、注册服务,并设置其生命周期,同时支持服务装饰等高级功能。适用于大型项目,提高代码的可维护性和简洁性。仓库地址:&lt;https://github.com/khellang/Scrutor&gt;
42 5
|
9天前
|
XML C# 数据格式
一个.NET开源、免费、功能强大的 PDF 处理工具
一个.NET开源、免费、功能强大的 PDF 处理工具
|
9天前
|
网络协议 C#
基于.NET WinForm开发的一款硬件及协议通讯工具
基于.NET WinForm开发的一款硬件及协议通讯工具
|
9天前
|
C# UED
一个.NET开源、易于使用的屏幕录制工具
一个.NET开源、易于使用的屏幕录制工具
|
9天前
|
Web App开发 C# Windows
一款.NET开源的Windows资源管理器标签页工具
一款.NET开源的Windows资源管理器标签页工具
|
2月前
|
开发框架 .NET C#
在 ASP.NET Core 中创建 gRPC 客户端和服务器
本文介绍了如何使用 gRPC 框架搭建一个简单的“Hello World”示例。首先创建了一个名为 GrpcDemo 的解决方案,其中包含一个 gRPC 服务端项目 GrpcServer 和一个客户端项目 GrpcClient。服务端通过定义 `greeter.proto` 文件中的服务和消息类型,实现了一个简单的问候服务 `GreeterService`。客户端则通过 gRPC 客户端库连接到服务端并调用其 `SayHello` 方法,展示了 gRPC 在 C# 中的基本使用方法。
49 5
在 ASP.NET Core 中创建 gRPC 客户端和服务器
|
1月前
|
开发框架 缓存 .NET
GraphQL 与 ASP.NET Core 集成:从入门到精通
本文详细介绍了如何在ASP.NET Core中集成GraphQL,包括安装必要的NuGet包、创建GraphQL Schema、配置GraphQL服务等步骤。同时,文章还探讨了常见问题及其解决方法,如处理复杂查询、错误处理、性能优化和实现认证授权等,旨在帮助开发者构建灵活且高效的API。
28 3
|
11天前
|
开发框架 算法 中间件
ASP.NET Core 中的速率限制中间件
在ASP.NET Core中,速率限制中间件用于控制客户端请求速率,防止服务器过载并提高安全性。通过`AddRateLimiter`注册服务,并配置不同策略如固定窗口、滑动窗口、令牌桶和并发限制。这些策略可在全局、控制器或动作级别应用,支持自定义响应处理。使用中间件`UseRateLimiter`启用限流功能,并可通过属性禁用特定控制器或动作的限流。这有助于有效保护API免受滥用和过载。 欢迎关注我的公众号:Net分享 (239字符)
29 0
|
3月前
|
安全 Java 网络安全
Android远程连接和登录FTPS服务代码(commons.net库)
Android远程连接和登录FTPS服务代码(commons.net库)
38 1
|
2月前
|
机器学习/深度学习 文字识别 并行计算
一款.NET开源的屏幕实时翻译工具
一款.NET开源的屏幕实时翻译工具