62 lines
1.8 KiB
C#
62 lines
1.8 KiB
C#
using Base62;
|
|
using Domain.SeedWork;
|
|
using System;
|
|
using System.Collections.Generic;
|
|
using System.IO;
|
|
using System.Linq;
|
|
using System.Security.Cryptography;
|
|
using System.Text;
|
|
using System.Threading.Tasks;
|
|
|
|
namespace Domain.AggregateModel.LinkAggregate
|
|
{
|
|
public class Link:Entity,IAggregateRoot
|
|
{
|
|
/// <summary>
|
|
/// 非自增主键
|
|
/// </summary>
|
|
public string ShortCode { get; private set; }
|
|
public string BaseUrl { get; private set; }
|
|
public string SuffixUrl { get; private set; }
|
|
public string FullUrl { get; private set; }
|
|
public int AppId { get; private set; }
|
|
public DateTime Time { get; private set; }
|
|
|
|
private Link()
|
|
{
|
|
|
|
}
|
|
/// <summary>
|
|
/// 创建一条新的短链接
|
|
/// </summary>
|
|
/// <param name="baseUrl"></param>
|
|
/// <param name="suffixUrl"></param>
|
|
/// <param name="appId">分配的应用id</param>
|
|
public Link(string baseUrl,string suffixUrl,int appId)
|
|
{
|
|
BaseUrl = baseUrl;
|
|
SuffixUrl = suffixUrl;
|
|
FullUrl = new Uri(new Uri(baseUrl),suffixUrl).ToString();
|
|
AppId = appId;
|
|
Time = DateTime.Now;
|
|
CalculateShortCode();
|
|
}
|
|
/// <summary>
|
|
/// 根据值计算短链字段
|
|
/// </summary>
|
|
/// <returns></returns>
|
|
private void CalculateShortCode()
|
|
{
|
|
string code;
|
|
using (var md5 = MD5.Create())
|
|
{
|
|
var result = md5.ComputeHash(Encoding.UTF8.GetBytes(FullUrl));
|
|
var res = new[] { BitConverter.ToInt64(result, 0) ,BitConverter.ToInt64(result,8)};
|
|
//任意取其中一条即可
|
|
code = res[new Random().Next(0,1)].ToBase62();
|
|
}
|
|
ShortCode = code;
|
|
}
|
|
}
|
|
}
|