por Saulo G. Pacífico

Compactador de URL com Entity Framework e URL Rewrite - ASP.NET

Exemplo de compactador de URL com Entity Framework e URL Rewrite com ASP.NET.
Você pode fazer download do código fonte do exmplo no final do artigo. Abaixo vou mostrar a extrutura e o código.

UrlModel.edmx (ADO.NET Entity Data Model)

Dados.mdf

 Abaixo o código para reescrever a URL (URL Rewrite)
Global.asax

protected void Application_BeginRequest(object sender, EventArgs e)
{
    HttpContext httpContext = HttpContext.Current;
    //Pega a URL
    string sDefaultPath = Context.Request.Path;

    string[] arrDefaultPath = sDefaultPath.Split('/');

    //Verifica se a URL possui duas ou mais "/"
    if (arrDefaultPath.Length > 2)
    {
        //Verifica se o segundo item do array é "r" (my.url/r/0880dd3)
        if (arrDefaultPath[1] == "r")
        {
            //URL real
            httpContext.RewritePath("/default.aspx?Id=" + arrDefaultPath[2]);
        }
    }
}

Esta será a página que vai fazer a listagem, que vai compactar e fazer o redirect.
Default.aspx

<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Default.aspx.cs" Inherits="CompactadorUrl.Default" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
    <title>Compactador de Url</title>
</head>
<body>
    <!-- NOTA: O nome desta página é default.aspx, mas será reescrita, passando a ser "r", 
    pois significa redirecionamento, e também, para que a url final fique bem pequena. -->
    <form id="form1" runat="server">
    <div>
    Url: <asp:TextBox runat="server" ID="txtUrl" Width="500px" /> 
        <asp:Button Text="Compactar" runat="server" ID="btnCompactar" onclick="btnCompactar_Click" />
        <br />
        <asp:ListView runat="server" ID="lvLinks" ViewStateMode="Disabled">
            <ItemTemplate>
                <ul>
                    <li>
                        Url Compactada: <a href="r/<%#Eval("CodRedirecionamento")%>">my.url/r/<%# Eval("CodRedirecionamento")%></a> <br />
                        Url original: <strong><%# Eval("UrlOriginal") %></strong><br />                  
                        Cliques: <%# Eval("Cliques") %>
                    </li> 
                </ul>
            </ItemTemplate>
            <EmptyDataTemplate>
                Nenhuma url compactada!
            </EmptyDataTemplate>
        </asp:ListView>
    </div>
    </form>
</body>
</html>

Default.aspx.cs

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;

namespace CompactadorUrl
{
    public partial class Default : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {
            //Pego o Id que veio mascarado na Url
            string codigo = Request.QueryString["Id"];
            //Variável utilizada no redirecionamento
            string UrlOriginal;
            //Se o Id for diferente de null...
            if (codigo != null)
            {
                //Instancio o contexto
                using (UrlEntities ctx = new UrlEntities())
                {
                    //Pego o objeto de acordo com a url
                    Url obj = ctx.Url.FirstOrDefault(
                        x => x.CodRedirecionamento == codigo);
                    //Incremento a quantidade de cliques da url em questão
                    obj.Cliques = obj.Cliques + 1;
                    //Faço minha variável receber a url original que está no banco
                    UrlOriginal = obj.UrlOriginal;
                    //Salvo as alterações
                    ctx.SaveChanges();
                }
                //Redireciono
                Response.Redirect(UrlOriginal);
            }
            AtualizaLV();
        }

        //Source do ListView
        private void AtualizaLV()
        {
            using (UrlEntities ctx = new UrlEntities())
            {
                lvLinks.DataSource = ctx.Url.OrderByDescending(
                    x => x.Id);
                lvLinks.DataBind();
            }
        }

        protected void btnCompactar_Click(object sender, EventArgs e)
        {
            //Crio uma variável para receber o Guid
            string g = Guid.NewGuid().ToString("D");
            //Instancio o contexto
            using (UrlEntities ctx = new UrlEntities())
            {
                //Crio o objeto
                Url obj = new Url();
                //Atribuo cada valor ao seu respectivo atributo
                obj.UrlOriginal = txtUrl.Text;
                //Pego um pedaço do Guid que será o código de redirecionamento da url
                obj.CodRedirecionamento = g.ToString().Substring(0, 7);
                obj.Cliques = 0;
                ctx.Url.AddObject(obj);
                //Salvo as alterações
                ctx.SaveChanges();
            }
            //Atualizo o ListView
            AtualizaLV();
        }
    }
}

Download do banco de dados e código fonte deste exemplo.

Créditos:
Saulo G. Pacífico
facebook.com/SauloPacifico
twitter.com/saulopacifico
www.sgpdesign.com.br

Comentários

Carregando comentários

Postar um novo comentário



Processando...