开发短网址平台的思路
Posted 昨日微风
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了开发短网址平台的思路相关的知识,希望对你有一定的参考价值。
1. 构建一个中间件,监测网站的响应状态,代码如下:
using Microsoft.AspNetCore.Builder;
using Microsoft.AspNetCore.Http;
using Microsoft.Extensions.Logging;
using NetCoreTFCMS.Domain.DbModel;
using System.Text.RegularExpressions;
using System.Threading.Tasks;
using TianFeng.FrameworkCore.DapperEx;
namespace NetCoreTFCMS.MiddleWare
{
public static class RequestIPExtensions
{
public static IApplicationBuilder UseWatchNoFound(this IApplicationBuilder builder)
{
return builder.UseMiddleware<WatchNoFoundMiddleWare>();
}
}
public class WatchNoFoundMiddleWare
{
private readonly RequestDelegate _next;
private readonly ILogger logger;
public WatchNoFoundMiddleWare(RequestDelegate next, ILoggerFactory loggerFactory)
{
_next = next;
logger = loggerFactory.CreateLogger<WatchNoFoundMiddleWare>();
}
public async Task Invoke(HttpContext context)
{
await _next.Invoke(context);
var path = context.Request.Path.ToString().Trim();
if (path.LastIndexOf("/") == 0)
{
var salt = path.Replace("/", "");
if (Regex.IsMatch(salt, @"^[a-zA-Z0-9]{6}$"))
{
var db = (IDbService)context.RequestServices.GetService(typeof(IDbService));
var model = await db.GetModelAsync<Link>(new { Salt = salt });
if (model != null)
{
if (!Regex.IsMatch(model.SiteUrl, "(file|gopher|news|nntp|telnet|http|ftp|https|ftps|sftp)://", RegexOptions.IgnoreCase))
{
model.SiteUrl = "http://" + model.SiteUrl;
}
context.Response.Redirect(model.SiteUrl, true);
}
else
{
logger.LogInformation(salt + "无匹配网址");
}
}
}
}
}
}
2.在startup.cs中的 Configure(IApplicationBuilder app)中添加引用 该 中间件
app.UseWatchNoFound();
这样该中间件就会响应短网址的六位字符串,如果匹配则重定向至对应的网址。
具体的短网址生成,我想就很简单,这里就不多说了,如果有需要,大家可以咨询我。
以上是关于开发短网址平台的思路的主要内容,如果未能解决你的问题,请参考以下文章
推荐十五个新浪T.CN短网址/腾讯URL短链接的生成缩短的工具
《超赞》新浪短链接(T.CN短网址)API接口批量生成生成器推荐