前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >【愚公系列】2022年03月 .NET CORE工具案例-短链接服务

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

作者头像
愚公搬代码
发布2022-03-04 12:46:12
3990
发布2022-03-04 12:46:12
举报
文章被收录于专栏:历史专栏

文章目录

前言

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

短链接的优点:

1、短

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

2、强大的数据功能

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

3、提高购买率

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

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

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

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

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

一、ID加密成字符串

1.自定义序列化

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

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

代码语言:javascript
复制
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);
    }
}

运行

代码语言:javascript
复制
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来实现:

代码语言:javascript
复制
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;
    }
}

运行

代码语言:javascript
复制
[HttpGet("{id}")]
public  UserDto Get([ModelBinder(typeof(HashIdModelBinder))]int id)
{
    return new UserDto { Id = id, Name = "用户"+id }  ;
}

二、短链接服务

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

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

短链接跳转接口:

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

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2022/03/02 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 文章目录
  • 前言
  • 一、ID加密成字符串
    • 1.自定义序列化
      • 2.自定义模型绑定
      • 二、短链接服务
      相关产品与服务
      短信
      腾讯云短信(Short Message Service,SMS)可为广大企业级用户提供稳定可靠,安全合规的短信触达服务。用户可快速接入,调用 API / SDK 或者通过控制台即可发送,支持发送验证码、通知类短信和营销短信。国内验证短信秒级触达,99%到达率;国际/港澳台短信覆盖全球200+国家/地区,全球多服务站点,稳定可靠。
      领券
      问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档