Un Evento Unico. 5 Sale. 27 Interventi. SEO, SOCIAL, E-Commerce, Mobile, Turismo.
CLICCA QUI e SCOPRI DI PIù X Chiudi

Visualizza un messaggio singolo
Vecchio 15-09-07, 18:14   #8 (permalink)
artistic101
 
L'avatar di artistic101
 
Data di registrazione: Apr 2007
Ubicazione: Abruzzo
Messaggi: 653
Quote:
omar_ita Visualizza il messaggio
Questo codice utilizza un sistema differente: si utilizza l'evento BeginRequest di Application (in Global.asax) per leggere la pagina richiesta (HttpContext.Current.Request.Path) che viene trasformata tramite le regole (che sono in web.config) e reindirizzata tramite HttpContext.Current.RewritePath(string);
Da tenere in considerazione quando si scrivono le regole è che se viene richiesta la pagina:

http://www.miosito.it/cartella/pagina.aspx

il valore ritornato da HttpContext.Current.Request.Path è

/cartella/pagina.aspx

In allegato c'è un progetto che potete includere nella vostra soluzione. Nel progetto web mettete un riferimento al progetto URLRewriter (o alla sola dll compilata) e poi in web.config aggiungete:

<configuration>
<configSections>
<sectionGroup name="system.web">
<section name="urlrewrites" type="URLRewriter.Rewriter, URLRewriter"/>
...
...


nella sezione configuration/configSections/sectionGroup e poi nella sezione
<system.web> aggiungere:

<urlrewrites>
<rule>
<url>^/[^/,]*,([0-9]*)\.aspx</url>
<rewrite>/showpage.aspx?id=$1</rewrite>
</rule>
</urlrewrites>


in <url> c'è l'url originale e in <rewrite> quello riscritto (tramite regexp). Può essere aggiunto un numero qualsiasi di elementi <rule>. Questa regola (per chi non è partico di espressioni regolari) ad esempio cerca / all'inizio dell'indirizzo, poi una sequenza di caratteri qualsiasi escluso / e "," poi una virgola, una serie di cifre numeriche, il punto (che viene trattato tramite escape "\") e aspx (se si cercano altre estensioni il metodo BeginRequest non viene invocato ). La stringa viene sostituita con:

/showpage.aspx?id=... (il numero letto dall'espressione precedente).

Ad esempio: /pagina_interessante,2.aspx diventa /showpage.aspx?id=2. Da notare che l'url visualizza /pagina_interessante,2.aspx mentre in realtà la pagina caricata è showpage.aspx che leggerà il valore id in maniera assolutamente normale da QueryString.

Infine creare la pagina Global.asax. ASP.NET 2.0 non ha molta simpatia per questa pagina: deve essere creata "manualmente" scrivendo dentro:

<%@ Application Inherits="Global" %>

Il code behind non può essere inserito nel ramo principale (viene ignorato) ma deve essere creato nella cartella app.code e contiene il seguente codice:

using System;
using System.Web;
public class Global : System.Web.HttpApplication
{
protected void Application_BeginRequest(object sender, EventArgs e)
{
string originalPath = HttpContext.Current.Request.Path;
string zSubst = URLRewriter.Rewriter.Process(originalPath);

if (zSubst.Length > 0 && !originalPath.Equals(zSubst))
HttpContext.Current.RewritePath(zSubst);
}
}

Con questo sistema non mi sembra ci siano problemi di trust level. Il sistema dovrebbe funzionare anche su asp.net 1.1 con opportune modifiche.
Sto provando questo metodo ma ottengo sempre errore 404, ho notato che nel Web.config il valore <urlrewrites> non è consentito (compare un warning), sarà per questo che non va?
__________________
Il mio profilo G+
artistic101 non in linea   Rispondi citando