Rewriting [Résolu]

Signaler
Messages postés
121
Date d'inscription
lundi 20 octobre 2003
Statut
Membre
Dernière intervention
24 juin 2010
-
Messages postés
44
Date d'inscription
vendredi 21 octobre 2005
Statut
Membre
Dernière intervention
2 mai 2011
-
Bonjour,
Je souhaite optimiser un site en .net (vb) pour du  référencement. Je pense utiliser le rewriting, mais tout ce que je trouve comme info et la configuration du fichier "web.config" avec l'ecriture manuelle des urls.

Dans mon cas j'ai un fichier usercontrole (ascx) qui contient un datagrid avec des centaines de réponses... coment faire pour crérer des urls rewriting à la volée. Je n'ai rien rtouvé sur le net de vraiment explicite et simple à comprendre.

Merci d'avance

Thierry

12 réponses

Messages postés
6814
Date d'inscription
dimanche 15 décembre 2002
Statut
Modérateur
Dernière intervention
13 octobre 2010
28
comment ca le lien est indigeste ? :-p 

Ce qu'il faut surtout comprendre c'est les httpmodule ensuite tu pourras faire ton rewriting toi même ;-) mais je n'ai aucun lien sur les httpmodule :-(

pour un exemple plus concret du rewriting ci dessus : http://www.aspfr.com/codes/IMPLEMENTER-TRES-FACILEMENT-URLREWRITER-REECRITURE-URL-NET-GENIAL_31527.aspx 

<hr />Cyril - MVS - MCP
Messages postés
6814
Date d'inscription
dimanche 15 décembre 2002
Statut
Modérateur
Dernière intervention
13 octobre 2010
28
Public Class HttpModuleRewriting
    Implements IHttpModule


    Private _context As HttpContext


    Public Sub Dispose() Implements System.Web.IHttpModule.Dispose


    End Sub


    Public Sub Init(ByVal context As System.Web.HttpApplication) Implements System.Web.IHttpModule.Init
        _context = context.Context
        AddHandler context.BeginRequest, AddressOf context_beginRequest
    End Sub


    Protected Sub context_beginRequest(ByVal sender As Object, ByVal e As EventArgs)
        _context.RewritePath("tapage.aspx?id=toto")
    End Sub


End Class





<hr />

Cyril - MVS - MCP
Messages postés
121
Date d'inscription
lundi 20 octobre 2003
Statut
Membre
Dernière intervention
24 juin 2010

Merci pour tout je vais me débrouiller avec tout ça

Thierry
Messages postés
6814
Date d'inscription
dimanche 15 décembre 2002
Statut
Modérateur
Dernière intervention
13 octobre 2010
28
Bonjour,

tout est expliqué ici : http://www.microsoft.com/france/msdn/aspnet/articles/2004-06-02-URLRewriting.mspx si tu veux faire ton propre rewriting il faudra utiliser des httpmodule ...

<hr />Cyril - MVS - MCP
Messages postés
121
Date d'inscription
lundi 20 octobre 2003
Statut
Membre
Dernière intervention
24 juin 2010

J'ai déja trouver ce lien. Mais Aurais-tu quelque chose de plus digeste? J'ai du mal à tout saisir et surtout je ne vois pas ou les urls à la volées sont créer dans ce lien?
Je n'ai jamais fait de rewriting alors je cherche quelque chose avec une approche plus cool et si possible avec des exemples concrets.

Thierry
Messages postés
121
Date d'inscription
lundi 20 octobre 2003
Statut
Membre
Dernière intervention
24 juin 2010

Indigeste : c'est doit même qui dit que c'est un peu compliquer à comprendre, voir le lien ci-dessous dans les remarques.
http://www.aspfr.com/codes/REECRITURE-URL-DANS-ASP-NET-URL-REWRITER_31258.aspx 
Je vos essayer de lire ceal tout de même dans le détail.

Ok je vais voir cela et essayer de trouver quelques chose sur les httpmodule. Car il est vrai que si je pouvais faire mon rewriting ce serait génial.

Merci d'avance cyril

Thierry
Messages postés
6814
Date d'inscription
dimanche 15 décembre 2002
Statut
Modérateur
Dernière intervention
13 octobre 2010
28
pour faire un httpmodule en gros, il faut faire une classe qui implemente IHttpModule, cette interface te force à implémenter une méthode (je me souviens plus du nom) en argument de cette methode tu as un objet HttpContext, tu t'abonnes à son evenement beginrequest, dans cet evenement tu recuperes l'url (context.Request.url) tu fais ton traitement sur l'url, et tu fais un context.rewritepath("tapage.aspx?id=toto") en gros voila comment ca fonctionne :p

si besoin je peux meme te fournir le code de ce que j'ai dit au dessus ;)

<hr />Cyril - MVS - MCP
Messages postés
121
Date d'inscription
lundi 20 octobre 2003
Statut
Membre
Dernière intervention
24 juin 2010

Ok pour le code à  fournir, je suis preneur...
Je vais essayer et je reviendrais si j'ai des problèmes.
Merci pour tout

Thierry
Messages postés
6814
Date d'inscription
dimanche 15 décembre 2002
Statut
Modérateur
Dernière intervention
13 octobre 2010
28
public class RewritingModule : IHttpModule
{


    private HttpContext Context;


    public void Dispose()
    {
    }


    public void Init(HttpApplication context)
    {
        context.BeginRequest += new EventHandler(context_BeginRequest);
        Context = context.Context;
    }


    void context_BeginRequest(object sender, EventArgs e)
    {
        // ici tu obtient l'url complete
        //Context.Request.RawUrl


        Context.RewritePath("tapage.aspx?id=truc");
    }


}





<hr />

Cyril - MVS - MCP
Messages postés
121
Date d'inscription
lundi 20 octobre 2003
Statut
Membre
Dernière intervention
24 juin 2010

Ok tu n'aurais pas ça en VB svp

Thierry
Messages postés
44
Date d'inscription
vendredi 21 octobre 2005
Statut
Membre
Dernière intervention
2 mai 2011

euh, Bonjour,

Je suis tres interrssé par ce code!

je me suis inspiré de ca

j'ai donc :

Module.vb :
Imports System

Imports System.Collections.Generic

Imports System.Text

Namespace MyProject.Urls

  Public Class [Module]

        Implements System.Web.IHttpModule
        Public Sub Init(ByVal Appl As System.Web.HttpApplication) Implements System.Web.IHttpModule.Init

            AddHandler Appl.BeginRequest, AddressOf Rewrite_BeginRequest

        End Sub

        Public Sub Dispose() Implements System.Web.IHttpModule.Dispose

        End Sub
    Public Sub Rewrite_BeginRequest(ByVal sender As Object, ByVal args As System.EventArgs)

      'on cast le sender en HttpAplication

      Dim Appl As System.Web.HttpApplication = DirectCast(sender, System.Web.HttpApplication)

      'On initialise le moteur de réécriture

      Dim e As New Engine(Appl)

      Dim r As String = e.Process()

      If r <> "" Then

        SendToNewUrl(r, Appl)

      End If

    End Sub

    Public Sub SendToNewUrl(ByVal url As String, ByVal Appl As System.Web.HttpApplication)

      'On réécrit l&#8217;url grace à la methode RewritePath

      Appl.Context.RewritePath(url)

    End Sub

  End Class

End Namespace

RealUrls.vb:

Imports System

Imports System.Collections.Generic

Imports System.Text

Namespace MyProject.Urls

  Public Class RealUrls

        Public Shared Function getVenteUrl(ByVal cleanUrl As String) As String

            If cleanUrl.Contains("-") Then

                Dim tabChar As Char() = New Char() {"-"c, "."c}

                Dim tab As String() = cleanUrl.Split(tabChar)

                Return "Default.aspx?transac=" + tab(1)

            Else

                Return "Default.aspx"

            End If

        End Function

        Public Shared Function getDefaultUrl() As String

            Return "Default.aspx"

        End Function

  End Class

End Namespace

CleanUrls.vb :

Imports System

Imports System.Collections.Generic

Imports System.Text

Namespace MyProject.Urls

  Public Class CleanUrls

        Public Shared Function getVenteUrl(ByVal ID_Transac As String) As String
            If ID_Transac = 1 Then
                Return "Immobilier-Vente.aspx"
            End If

        End Function

        Public Shared Function getVenteUrl() As String

            Return "Immobilier.aspx"

        End Function

  End Class

End Namespace

et Engine.vb :

Imports System

Imports System.Collections.Generic

Imports System.Text

Namespace MyProject.Urls

  Class Engine

    Private app As System.Web.HttpApplication

    Public Sub New(ByVal httpApp As System.Web.HttpApplication)

      app = httpApp

    End Sub

    Public Function Process() As String

            If app.Request.AppRelativeCurrentExecutionFilePath.Contains("~/Immobilier-Vente") Then

                Return RealUrls.getVenteUrl(app.Request.AppRelativeCurrentExecutionFilePath)

            End If

            If app.Request.AppRelativeCurrentExecutionFilePath.Contains("~/Immobilier") Then

                Return RealUrls.getDefaultUrl()

            End If

      Return ""

    End Function

  End Class

End Namespace

et ensuite je fais quoi?

Désolé mais je suis un peu perdu la...
Messages postés
44
Date d'inscription
vendredi 21 octobre 2005
Statut
Membre
Dernière intervention
2 mai 2011

en fait ma question c'est ce que l'on doit faire du http module que l'on a créé pour pouvoir s'en servir pour faire de l'url rewriting