Un simple acortador de enlaces (URLs) en .net core

En días pasados necesite la implementación de un acortador de urls o enlaces para un proyecto que estoy realizando en .net core.

Después de una búsqueda por el maravilloso mundo de las cosas perdidas del internet, encontré varias alternativas, una muy simples, otras muy complicadas y con funcionalidad que no requería, hasta algunas muy costosas y que no podía permitirme.

Tras realizar un análisis de lo que realmente requería me percate que sería muy simple y rápido realizar un implementacion propia.

Así nació JCTools.Shortener.

JCTools.Shortener es un simple acortador de link que se puede incluir en forma rapida y facil en tus proyectos de .net core.

Permite agregar soporte para crear enlaces únicos y aleatorios. estos enlaces son urls como las siguientes:

De tal forma que agregues la posibilidad de compartir páginas o funcionalidades a tus usuarios de una forma rápida y a la cual ya están acostumbrados a manejar.

Los enlaces generados se componen de un “token” único y aleatorio, conformado por las letras del alfabeto inglés [a-zA-Z] y los dígitos [0-9], lo que provee un total de 62 caracteres distintos.

Estos caracteres seleccionados nos brindan la posibilidad de generar más de 57 billones de combinaciones distintas.

Adicionalmente, se configuró para que los enlaces tengan una longitud de entre 2 y 6 caracteres.

Uso

  • Agrega el paquete JCTools.Shortener a tu proyecto
dotnet add package JCTools.Shortener -v 1.0.6
  • Implementa la interface IDatabaseContext en tu contexto de acceso a tu base de datos 

public class DataContext : Microsoft.EntityFrameworkCore.DbContext, JCTools.Shortener.Settings.IDatabaseContext
{
   public DataContext(DbContextOptions<DataContext> options)
     : base(options) { }
   public DbSet<ShortLink> ShortLinks { get; set; }
} 
  • Agrega el namespace JCTools.Shortener en tu clase Startup
using JCTools.Shortener;
  • Configura el servicio ILinkGenerator en el método ConfigureServices de la clase startup de tu proyecto

services.AddLinksShortener();
  • Inyecta el servicio JCTools.Shortener.Services.ILinkGenerator en el controlador, clase, servicio o vista donde requieras la funcionalidad

    public class OtherController : Controller
    {
        private readonly ILinkGenerator _shortenerService;

        public OtherController(ILinkGenerator shortenerService)
        {
            ...
    
            this._shortenerService = shortenerService;
    
            ...
        }

        ...

    }    
  • Genera los enlaces y relacionarlos al enlace real que deseas compartir


    ...

    // Solo generar un nuevo token
    var token = await _shortenerService.GenerateTokenAsync();

    // Generar una nueva entidad ShortLink
    var realUrl = "https://www.google.com/doodles/"
    var link = await _shortenerServices.GenerateAsync(realUrl);

    // Generar una nueva entidad ShortLink y alamcenarla en la base de datos
    var other = await _shortenerServices. GenerateAndSaveAsync(realUrl); 

    ...
  • Listo

 

Otras configuraciones

En el paso 4 se configuró e inicializar el servicio ILinkGenerator, este servicio permite configurar las opciones default de la generación de enlaces de la siguiente forma:


    ...

    services.AddLinksShortener(o => {
        // 1. Cambiar los caracteres a utilizar en la generación de los enlaces
        o.ValidCharacters = "1234567890-_qwerty";
        // 2. Cambiar la longitud mínima (2 caracteres) de los tokens
        o.MinLength = 3; 
        // 3. Cambiar la longitud máxima (3 caracteres) de los tokens
        o.MaxLength = 10;
        // 4. De forma predeterminada el acceso a los links generados es anónimo,
        // pero es posible cambiar este comportamiento mediante una política de autenticación
        o.ConfigurePolicy = p => {
            p.RequireAuthenticatedUser();
            p.RequireRole("admin");
            
            ...
        
        };
    });

    ...

Conclusión

De esta forma se puede implementar de rápida y fácilmente la funcionalidad de acortar urls para compartir recursos a nuestros usuarios.

Como siempre el código lo pueden encontrar en mi repositorio en github.

Jean Carlo

Entusiasta de la programación, freelance intermitente, lector asiduo, cinéfilo, y editor esporadico en este sitio.

0 comentarios

Agregar un comentario