update:重复创建也返回成功
创建时可直接返回二维码
This commit is contained in:
@@ -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;
|
||||
}
|
||||
|
||||
@@ -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<CreateLinkCommand, Link>
|
||||
{
|
||||
|
||||
readonly ILogger<CreateLinkCommandHandler> logger;
|
||||
readonly IAppRepository appRepository;
|
||||
readonly ILinkRepository linkRepository;
|
||||
|
||||
public CreateLinkCommandHandler(ILinkRepository linkRepository, IAppRepository appRepository)
|
||||
public CreateLinkCommandHandler(ILinkRepository linkRepository, IAppRepository appRepository, ILogger<CreateLinkCommandHandler> logger)
|
||||
{
|
||||
this.linkRepository = linkRepository;
|
||||
this.appRepository = appRepository;
|
||||
this.logger = logger;
|
||||
}
|
||||
|
||||
async Task<Link> IRequestHandler<CreateLinkCommand, Link>.Handle(CreateLinkCommand request, CancellationToken cancellationToken)
|
||||
async Task<Link> IRequestHandler<CreateLinkCommand, Link>.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();
|
||||
|
||||
@@ -35,7 +35,7 @@ namespace QRCodeService.Controllers.Api
|
||||
}
|
||||
[Route("i/{shortCode}/")]
|
||||
[HttpGet]
|
||||
public async Task<IActionResult> GetQrCode(string shortCode,int img=0)
|
||||
public async Task<IActionResult> 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");
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 创建二维码 如果请求头的Accept类型是image/png 则会返回二维码图片 否则返回二维码地址
|
||||
/// </summary>
|
||||
/// <param name="input"></param>
|
||||
/// <returns></returns>
|
||||
[CheckSign]
|
||||
[HttpPost]
|
||||
public async Task<IActionResult> 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}");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user