update:重复创建也返回成功
创建时可直接返回二维码
This commit is contained in:
@@ -56,7 +56,7 @@ namespace Domain.AggregateModel.LinkAggregate
|
|||||||
var result = md5.ComputeHash(Encoding.UTF8.GetBytes(FullUrl));
|
var result = md5.ComputeHash(Encoding.UTF8.GetBytes(FullUrl));
|
||||||
var res = new[] { BitConverter.ToInt64(result, 0) ,BitConverter.ToInt64(result,8)};
|
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;
|
ShortCode = code;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -2,6 +2,7 @@
|
|||||||
using Domain.AggregateModel.LinkAggregate;
|
using Domain.AggregateModel.LinkAggregate;
|
||||||
using Domain.Exceptions;
|
using Domain.Exceptions;
|
||||||
using MediatR;
|
using MediatR;
|
||||||
|
using Microsoft.Extensions.Logging;
|
||||||
using System;
|
using System;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using System.Linq;
|
using System.Linq;
|
||||||
@@ -13,16 +14,19 @@ namespace QRCodeService.Application.Commands
|
|||||||
{
|
{
|
||||||
public class CreateLinkCommandHandler : IRequestHandler<CreateLinkCommand, Link>
|
public class CreateLinkCommandHandler : IRequestHandler<CreateLinkCommand, Link>
|
||||||
{
|
{
|
||||||
|
|
||||||
|
readonly ILogger<CreateLinkCommandHandler> logger;
|
||||||
readonly IAppRepository appRepository;
|
readonly IAppRepository appRepository;
|
||||||
readonly ILinkRepository linkRepository;
|
readonly ILinkRepository linkRepository;
|
||||||
|
|
||||||
public CreateLinkCommandHandler(ILinkRepository linkRepository, IAppRepository appRepository)
|
public CreateLinkCommandHandler(ILinkRepository linkRepository, IAppRepository appRepository, ILogger<CreateLinkCommandHandler> logger)
|
||||||
{
|
{
|
||||||
this.linkRepository = linkRepository;
|
this.linkRepository = linkRepository;
|
||||||
this.appRepository = appRepository;
|
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);
|
var app = await appRepository.GetAsync(request.AppId);
|
||||||
if (app == null)
|
if (app == null)
|
||||||
@@ -33,7 +37,8 @@ namespace QRCodeService.Application.Commands
|
|||||||
var dbLink = await linkRepository.GetAsync(link.ShortCode);
|
var dbLink = await linkRepository.GetAsync(link.ShortCode);
|
||||||
if (dbLink != null)
|
if (dbLink != null)
|
||||||
{
|
{
|
||||||
throw new DomainException("url has been registed");
|
logger.LogDebug("use exist link");
|
||||||
|
return dbLink;
|
||||||
}
|
}
|
||||||
link = linkRepository.Add(link);
|
link = linkRepository.Add(link);
|
||||||
await linkRepository.UnitOfWork.SaveEntitiesAsync();
|
await linkRepository.UnitOfWork.SaveEntitiesAsync();
|
||||||
|
|||||||
@@ -35,7 +35,7 @@ namespace QRCodeService.Controllers.Api
|
|||||||
}
|
}
|
||||||
[Route("i/{shortCode}/")]
|
[Route("i/{shortCode}/")]
|
||||||
[HttpGet]
|
[HttpGet]
|
||||||
public async Task<IActionResult> GetQrCode(string shortCode,int img=0)
|
public async Task<IActionResult> GetQrCodeImage(string shortCode)
|
||||||
{
|
{
|
||||||
var link = await linkQueries.GetLinkAsync(shortCode);
|
var link = await linkQueries.GetLinkAsync(shortCode);
|
||||||
if (link == null)
|
if (link == null)
|
||||||
@@ -51,7 +51,11 @@ namespace QRCodeService.Controllers.Api
|
|||||||
return File(stream.ToArray(), "image/png");
|
return File(stream.ToArray(), "image/png");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
/// <summary>
|
||||||
|
/// 创建二维码 如果请求头的Accept类型是image/png 则会返回二维码图片 否则返回二维码地址
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="input"></param>
|
||||||
|
/// <returns></returns>
|
||||||
[CheckSign]
|
[CheckSign]
|
||||||
[HttpPost]
|
[HttpPost]
|
||||||
public async Task<IActionResult> Create(CreateLinkModel input)
|
public async Task<IActionResult> Create(CreateLinkModel input)
|
||||||
@@ -62,7 +66,19 @@ namespace QRCodeService.Controllers.Api
|
|||||||
{
|
{
|
||||||
return BadRequest();
|
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