From 65dcef0f646ef5e18a8733d361f9c0cf13ac557d Mon Sep 17 00:00:00 2001 From: zhangqi <2794379662@qq.com> Date: Thu, 4 Mar 2021 10:52:30 +0800 Subject: [PATCH] =?UTF-8?q?update:=E9=87=8D=E5=A4=8D=E5=88=9B=E5=BB=BA?= =?UTF-8?q?=E4=B9=9F=E8=BF=94=E5=9B=9E=E6=88=90=E5=8A=9F=20=E5=88=9B?= =?UTF-8?q?=E5=BB=BA=E6=97=B6=E5=8F=AF=E7=9B=B4=E6=8E=A5=E8=BF=94=E5=9B=9E?= =?UTF-8?q?=E4=BA=8C=E7=BB=B4=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Domain/AggregateModel/LinkAggregate/Link.cs | 2 +- .../Commands/CreateLinkCommandHandler.cs | 11 +++++++--- .../Controllers/Api/LinkController.cs | 22 ++++++++++++++++--- 3 files changed, 28 insertions(+), 7 deletions(-) diff --git a/Domain/AggregateModel/LinkAggregate/Link.cs b/Domain/AggregateModel/LinkAggregate/Link.cs index c714487..d96533f 100644 --- a/Domain/AggregateModel/LinkAggregate/Link.cs +++ b/Domain/AggregateModel/LinkAggregate/Link.cs @@ -56,7 +56,7 @@ namespace Domain.AggregateModel.LinkAggregate 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(); + code = res[0].ToBase62(); } ShortCode = code; } diff --git a/QRCodeService/Application/Commands/CreateLinkCommandHandler.cs b/QRCodeService/Application/Commands/CreateLinkCommandHandler.cs index cb790a4..1a8da27 100644 --- a/QRCodeService/Application/Commands/CreateLinkCommandHandler.cs +++ b/QRCodeService/Application/Commands/CreateLinkCommandHandler.cs @@ -2,6 +2,7 @@ using Domain.AggregateModel.LinkAggregate; using Domain.Exceptions; using MediatR; +using Microsoft.Extensions.Logging; using System; using System.Collections.Generic; using System.Linq; @@ -13,16 +14,19 @@ namespace QRCodeService.Application.Commands { public class CreateLinkCommandHandler : IRequestHandler { + + readonly ILogger logger; readonly IAppRepository appRepository; readonly ILinkRepository linkRepository; - public CreateLinkCommandHandler(ILinkRepository linkRepository, IAppRepository appRepository) + public CreateLinkCommandHandler(ILinkRepository linkRepository, IAppRepository appRepository, ILogger logger) { this.linkRepository = linkRepository; this.appRepository = appRepository; + this.logger = logger; } - async Task IRequestHandler.Handle(CreateLinkCommand request, CancellationToken cancellationToken) + async Task IRequestHandler.Handle(CreateLinkCommand request, CancellationToken cancellationToken) { var app = await appRepository.GetAsync(request.AppId); if (app == null) @@ -33,7 +37,8 @@ namespace QRCodeService.Application.Commands var dbLink = await linkRepository.GetAsync(link.ShortCode); if (dbLink != null) { - throw new DomainException("url has been registed"); + logger.LogDebug("use exist link"); + return dbLink; } link = linkRepository.Add(link); await linkRepository.UnitOfWork.SaveEntitiesAsync(); diff --git a/QRCodeService/Controllers/Api/LinkController.cs b/QRCodeService/Controllers/Api/LinkController.cs index b904eb3..d6e8ead 100644 --- a/QRCodeService/Controllers/Api/LinkController.cs +++ b/QRCodeService/Controllers/Api/LinkController.cs @@ -35,7 +35,7 @@ namespace QRCodeService.Controllers.Api } [Route("i/{shortCode}/")] [HttpGet] - public async Task GetQrCode(string shortCode,int img=0) + public async Task GetQrCodeImage(string shortCode) { var link = await linkQueries.GetLinkAsync(shortCode); if (link == null) @@ -51,7 +51,11 @@ namespace QRCodeService.Controllers.Api return File(stream.ToArray(), "image/png"); } } - + /// + /// 创建二维码 如果请求头的Accept类型是image/png 则会返回二维码图片 否则返回二维码地址 + /// + /// + /// [CheckSign] [HttpPost] public async Task Create(CreateLinkModel input) @@ -62,7 +66,19 @@ namespace QRCodeService.Controllers.Api { return BadRequest(); } - return Created($"{option.Value.BaseUrl}r/{link.ShortCode}",link.ShortCode); + var accept = Request.Headers["Accept"]; + if(accept == "image/png") + { + var qrCodeGenerator = new QRCodeGenerator(); + var data = qrCodeGenerator.CreateQrCode($"{option.Value.BaseUrl}r/{link.ShortCode}", QRCodeGenerator.ECCLevel.Q); + var qrCode = new QRCode(data); + using (var stream = new MemoryStream()) + { + qrCode.GetGraphic(10, Color.Black, Color.White, null, 15, 6, false).Save(stream, System.Drawing.Imaging.ImageFormat.Png); + return File(stream.ToArray(), "image/png"); + } + } + return Ok($"{option.Value.BaseUrl}r/{link.ShortCode}"); } } }