using Domain.AggregateModel.LinkAggregate; using Microsoft.AspNetCore.Mvc; using QRCodeService.Models; using System; using System.Collections.Generic; using System.IO; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Security.Cryptography; using Domain.AggregateModel.AppAggregate; using Base62; using QRCodeService.Extensions; namespace QRCodeService.Controllers { /// /// 生成二维码图片 /// [Route("api/[controller]")] [ApiController] public class GenController:ControllerBase { readonly ILinkRepository linkRepository; readonly IAppRepository appRepository; public GenController(ILinkRepository linkRepository, IAppRepository appRepository) { this.linkRepository = linkRepository; this.appRepository = appRepository; } [HttpPost] public async Task CreateLink(GenInputModel model) { var app = await appRepository.GetAsync(model.AppId); if (app == null) { return BadRequest(); } using(var md5 = MD5.Create()) { var result = md5.ComputeHash(Encoding.UTF8.GetBytes($"{model.AppId}{model.SuffixUrl}{model.Time}{app.AppKey}")); var sign = BitConverter.ToString(result); if (sign != model.Sign) { return BadRequest(); } } var shortCode = $"{model.SuffixUrl}".ToMD5().ToBase62(); var link = new Link(app.BaseUrl, model.SuffixUrl,1); linkRepository.Add(link); await linkRepository.UnitOfWork.SaveEntitiesAsync(); return Ok(link.ShortCode); } } }