Přeskoč navigaci

Programová náhrada mod_rewrite pro ASP.NET alias přesměrování

Pokud máte svůj web tak se může sem tam hodit přesměrování stránek nebo celých webů.

Můžete potřebovat přesměrovat různé požadavky, ale já ukáži pro mne dvě zajímavé:

  • přepsání url na jednu stránku, kde část url je předaná jako parametr
  • přepsání části webu (máte alias)

Začneme přímo kódem

Kód bude umístěn v adresáři App_Code a může být samozřejmě předkompilován jako assembly.

using System.Web;
using System.IO;
using System.Web.UI;

public class RemapHandler : IHttpHandlerFactory
{
  public IHttpHandler GetHandler(HttpContext Context, string requestType,
     string url, string sPathTranslated)
  {
    IHttpHandler o;
        
    // Handle weburl.cz, all pages are in subdirectory /weburldir on disk
    if (Context.Request.Url.AbsoluteUri.ToLower().IndexOf("weburl.cz") > 0)
    {
      o = PageParser.GetCompiledPageInstance("/weburldir/" + Context.Request.Url.LocalPath, 
         Context.Server.MapPath("/weburldir/" + Context.Request.Url.LocalPath), Context);
      return o;
    }
    string sPath = Context.Request.AppRelativeCurrentExecutionFilePath.ToLower();
    string sScriptName = null;

   // rewrite /articles/* to ArticlePage.aspx with ID 
   if (sPath.StartsWith("~/articles/"))
   {
      sScriptName = "~/ArticlePage.aspx";
   }
   else if (sPath.StartsWith("~/tag/"))
   {
      sScriptName = "~/TagPage.aspx";
   }
   else
   {
     if (Path.GetExtension(sPath) == ".aspx")
     {
       o = PageParser.GetCompiledPageInstance(Context.Request.Path, sPathTranslated, Context);
       return o;
     }
     return new DefaultHttpHandler();
   }
   // pass data as ID
   Context.Items["ID"] = System.IO.Path.GetFileNameWithoutExtension(sPathTranslated);
   o = PageParser.GetCompiledPageInstance(sScriptName, 
          Context.Server.MapPath(sScriptName), Context);
   return o;
  }

  public void ReleaseHandler(IHttpHandler handler)
  {

  }
}

Úprava web.config

Nyní je třeba říci ASP.NET, že má volat Váš handler a to provedeme přidáním informace do sekce <system.web>.

  <system.web>
    <httpHandlers>
      <add verb="*" path="*.aspx" type="RemapHandler"/>
    </httpHandlers>
   ….

Získání předaných parametrů

V případě přepisu url si předáváme data v ID a získáme je jednoduše např. v Page_Load:

  protected void Page_Load(object sender, EventArgs e)
  {
    string sId = (string)Context.Items["ID"];
    …
  }

Tak a přepisovací minimum máme za sebou.

Jaggni to|Linkuj

Komentáře k tomuto článku



Prosím o dodržovaní určitých pravidel (tj. žádné neslušné texty, reklamy a tak prostě podobně). Komentáře porušující tyto pravidla budou odstraněny.

Před vložením komentáře je nutno provést náhled, jedná se o ochranu proti spamu.

 

Vložení komentáře
  
 
 

 

© NetCode.cz, 2006-9 | Všechna práva vyhrazena
Provozováno na mém pikoCMS, vygenerováno: 24.11.2017 6:41:26

O mně

Informace o mé maličkosti a kontakt.

Lokální tagy

amd(1) amiga(1) apple(1) aspnet(2) audio(1) borland(5) C64(1) codegear(12) delphi(39) dotnet(9) dvd(1) electone(1) embarcadero(1) emulator(11) firebird(2) flash(1) freepascal(5) gamecube(3) gigabyte(2) google(3) hardware(48) holografie(1) homebrew(29) hry(12) ibm(14) iphone(7) jidlo(1) komponenty(1) konzole(15) latex(1) lenovo(17) migrace(1) modchip(3) moje(9) mplayer(3) mssql(1) multi-touch(3) native-api(1) navody(23) nintendo(53) Nintendo3DS(2) nintendo64(6) NintendoDS(15) onestation(2) opera(1) ot(1) palm(1) pascal(1) pdf(1) pic(2) pmd85(1) pocitace(1) print-server(2) programovani(21) programy(25) R400(1) recenze(6) retro(1) satelit(1) seamonkey(5) snes(3) svepomoci(1) technika(1) thinkpad(20) usb(1) video(3) vs(3) vykriky(12) web(7) webdesign(8) wii(83) wiimote(13) wiiware(1) wiki(2) windows(7) windows-mobile(1) wl500g(2) wtf(8) zivot(1) ZX-Spectrum(5)