init project
This commit is contained in:
58
QRCodeService/Controllers/GenController.cs
Normal file
58
QRCodeService/Controllers/GenController.cs
Normal file
@@ -0,0 +1,58 @@
|
||||
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
|
||||
{
|
||||
/// <summary>
|
||||
/// 生成二维码图片
|
||||
/// </summary>
|
||||
[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<IActionResult> 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);
|
||||
}
|
||||
}
|
||||
}
|
||||
34
QRCodeService/Controllers/GoController.cs
Normal file
34
QRCodeService/Controllers/GoController.cs
Normal file
@@ -0,0 +1,34 @@
|
||||
using Domain.AggregateModel.LinkAggregate;
|
||||
using Microsoft.AspNetCore.Mvc;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
namespace QRCodeService.Controllers
|
||||
{
|
||||
/// <summary>
|
||||
/// 跳转url请求的地址
|
||||
/// </summary>
|
||||
[Route("{shortCode}")]
|
||||
[ApiController]
|
||||
public class GoController: ControllerBase
|
||||
{
|
||||
readonly ILinkRepository LinkRepository;
|
||||
public GoController(ILinkRepository linkRepository)
|
||||
{
|
||||
LinkRepository = linkRepository;
|
||||
}
|
||||
[HttpGet]
|
||||
public async Task<IActionResult> Get(string shortcode)
|
||||
{
|
||||
var link = await LinkRepository.GetAsync(shortcode);
|
||||
if (link == null)
|
||||
{
|
||||
return NotFound();
|
||||
}
|
||||
return Redirect(link.FullUrl);
|
||||
}
|
||||
}
|
||||
}
|
||||
29
QRCodeService/Controllers/ImageController.cs
Normal file
29
QRCodeService/Controllers/ImageController.cs
Normal file
@@ -0,0 +1,29 @@
|
||||
using Microsoft.AspNetCore.Http;
|
||||
using Microsoft.AspNetCore.Mvc;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Threading.Tasks;
|
||||
using QRCoder;
|
||||
using System.IO;
|
||||
|
||||
namespace QRCodeService.Controllers
|
||||
{
|
||||
[Route("api/[controller]")]
|
||||
[ApiController]
|
||||
public class ImageController : ControllerBase
|
||||
{
|
||||
[Route("{shortCode}")]
|
||||
public IActionResult Get(string shortCode)
|
||||
{
|
||||
var qrCodeGenerator = new QRCodeGenerator();
|
||||
var data = qrCodeGenerator.CreateQrCode("www.baidu.com", QRCodeGenerator.ECCLevel.Q);
|
||||
var qrCode = new QRCode(data);
|
||||
using (var stream = new MemoryStream())
|
||||
{
|
||||
qrCode.GetGraphic(20).Save(stream, System.Drawing.Imaging.ImageFormat.Png);
|
||||
return File(stream.ToArray(), "image/png", "qrcode.png");
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
35
QRCodeService/Controllers/PlaygroundController.cs
Normal file
35
QRCodeService/Controllers/PlaygroundController.cs
Normal file
@@ -0,0 +1,35 @@
|
||||
using Base62;
|
||||
using Microsoft.AspNetCore.Mvc;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Security.Cryptography;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
namespace QRCodeService.Controllers
|
||||
{
|
||||
[Route("[controller]/[action]")]
|
||||
public class PlaygroundController:ControllerBase
|
||||
{
|
||||
public IActionResult GenShortCode(string url)
|
||||
{
|
||||
var codes = new string[2];
|
||||
using (var md5 = MD5.Create())
|
||||
{
|
||||
var chunkSize = 8;
|
||||
var result = md5.ComputeHash(Encoding.UTF8.GetBytes(url));
|
||||
for (int i = 0; i < 2; i++)
|
||||
{
|
||||
var first = result.Take(chunkSize).ToArray();
|
||||
//即超过30位的忽略处理
|
||||
var res = BitConverter.ToInt64(first);
|
||||
var code = res.ToBase62();
|
||||
codes[i] = code;
|
||||
result = result.Skip(chunkSize).ToArray();
|
||||
}
|
||||
return Ok(codes);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user