Seite 1 von 1
mod_rewrite in ASP(.net) ohne Komponente?
Verfasst: 27.02.2006, 10:50
von Nasirea
Hi Forum,
was ist die beste Möglichkeit um die Parameter-URL's auf dem IIS umzuschreiben? Hat sich da jemand von euch schon durchkämpfen müssen?
Es gibt da eine Lösung mit ISAPI Filter und einer Komponente, aber ich denke es gibt sicherlich auch eine Lösung ohne Komponente, oder? Vielleicht in Dot.net oder so...
mfg
Nasirea
Verfasst:
von
SEO Consulting bei
ABAKUS Internet Marketing Erfahrung seit 2002
- persönliche Betreuung
- individuelle Beratung
- kompetente Umsetzung
Jetzt anfragen:
0511 / 300325-0.
Verfasst: 27.02.2006, 11:20
von HW
Hallo Nasirea,
ISAPI Filter wäre das Einfachste, lassen aber die meisten Provider nicht zu.
Du kannst einen HttpHandler schreiben und denn dann in der Web.config einbinden.
Das ist nicht so schwer wie es sich anhört. Ich setze diese Technik erfolgreich auf meinen Artikel-Plattformen ein.
(
www.artikel-base.de)
Google mal ein wenig nach HttpHandler, da findest Du zahlreiche Beispiele.
Gruß HW
Sehr interessant...
Verfasst: 27.02.2006, 11:24
von Nasirea
Das hört sich sehr gut an, hast Du einen Codeschnipsel für mich, oder kannst mich ein wenig schlau machen?
Grüsse
Nasirea
mod_rewrite in ASP(.net) ohne Komponente?
Verfasst: 27.02.2006, 11:42
von HW
..ich kenne deinen Wissensstand natürlich nicht, hier mal eine Beisspielklasse:
Ich habe den ganzen Kram in einer dll verpackt, die ich immer wieder nutze.
using System;
using System.Web;
using System.Text;
using System.Collections;
using System.Configuration;
using System.Web.SessionState; //für IRequiresSessionState - sonst sind keine SessionStates möglich
namespace Artikel.Lib
{
public class ListenRequestHandler : IHttpHandler, IRequiresSessionState
{
#region IHttpHandler Members
private HttpContext currContex;
/// <summary>
/// This method processes the incoming request.
/// </summary>
/// <param name="context">The HTTP context in which the request was called from.</param>
///
public void ProcessRequest(HttpContext context)
{
//Einstellungen für das Projekt lesen
currContex = context;
//String Builder für Ziel URL
StringBuilder targetURL = new StringBuilder();
//scriptName enthält die komplette URL
string[] initialURLElements = context.Request.ServerVariables["SCRIPT_NAME"].Split('/');
ArrayList urlElements = new ArrayList(); //hier werden später die relevanten Verzeichnisse verarbeitet
//Grabbing findet erst nach dem Verzeichnis in der die Anwendung arbeiten soll statt. (Artikel)
bool startGrabbing = false;
string grabbDirectory = ConfigurationSettings.AppSettings["grabbDirectory"];
for (int i = 0; i < initialURLElements.Length; i++)
{
if (initialURLElements.ToString().ToLower() == grabbDirectory ) startGrabbing = true;
if (startGrabbing) urlElements.Add(initialURLElements);
}
//Unterscheidung ist erforderlich, um unterschiedliche Transfers durchführen zu können.
string strPage= urlElements[urlElements.Count-1].ToString().ToLower();
strPage = strPage.Substring(0,strPage.Length -5);
if (strPage == "index")
{
context.Server.Transfer("~/ArtikelForms/" + ConfigurationSettings.AppSettings["transferForm"]);
}
else
context.Server.Transfer("~/ArtikelForms/" + ConfigurationSettings.AppSettings["transferForm"] + "?page=" + strPage);
}
public bool IsReusable
{
get
{
return true;
}
}
#endregion
}
}
der Eintrag in der Web.config sieht dann so aus:
<httpHandlers>
<add verb="*" path="*.aspx" validate="false" type="Artikel.Lib.ListenRequestHandler, ArtikelLib" />
</httpHandlers>
durchboxen
Verfasst: 27.02.2006, 12:17
von Nasirea
... alles klar, dann versuche ich mich da mal durchzuboxen.
Ein kleines Hello-World Beispiel haste nicht zufällig für mich? Wäre echt Klasse wenn Du mir was zukommen lassen könntest, was ich einfach mal zum probieren auf den Server schmeissen kann.
mfg
Nasirea