Avatar billede torotune Nybegynder
16. august 2012 - 15:57 Der er 9 kommentarer og
1 løsning

UrlRewriter.NET - hjælp til regel

Hej,

Jeg har prøvet at test UrlRewriter.net-komponenten, med udgangspunkt i denne artikel som beskriver problemstillingerne:

http://weblogs.asp.net/scottgu/archive/2007/02/26/tip-trick-url-rewriting-with-asp-net.aspx

Der ligger et sample-website til download derinde, men jeg kan simpelthen ikke få det til at passe til mit behov, som i første omgang er totalt simpelt. Nemlig at en url som f.eks.
bliver tastet således ud i browseren:

http://localhost/rewritetest/Default.aspx?ID=32

kommer til at se sådan ud:

http://localhost/rewritetest/32

Hvordan dælen kan den regel i web.config se ud?

Sample-websitet kan downloades her: http://www.scottgu.com/blogposts/urlrewrite/UrlRewrite_HttpModule2.zip

Optimalt skal man jo have trukket ID'et fra querystring'en ind og have lavet noget titel-generering som så skydes ud i URL'en.

Hvordan vil den slags se ud - vil man der skulle benytte Global.asax?

Håber nogen kan hjælpe lidt.

Mvh.
Avatar billede keysersoze Guru
16. august 2012 - 16:27 #1
Der kan selvfølgelig være specifikke grunde til at du har kigget på urlrewriter (fx gammelt framework eller IIS), men som udgangspunkt får du en lettere tilgang til det ved at benytte hvad der er indbygget i .NET nemlig Routing.
Avatar billede torotune Nybegynder
16. august 2012 - 18:15 #2
Hej Keysersoze, jeg vil hellere end gerne bruge de nye routing features i version 4, men jeg var af det indtryk at URL routing og URL rewrite ikke er det samme, derfor har jeg bøvlet en del
med de 3. parts komponenter der ligger derude.

Men dvs. der er mulighed for at skrive URL's med variable querystrings om til noget smukkere? Sat sammen med titel hentet fra database on the fly - altså som i ovenstående
hvor

/default.aspx?PageID=32

bliver til eks.:

/navnet-paa-min-side-med-id-32
Avatar billede janus_007 Nybegynder
16. august 2012 - 19:11 #3
kig på http://www.iis.net/download/urlrewrite, den er langt nemmere at configurere igennem IIS'en :)

Der er forskel på routing og rewriting, omend den måske ikke er stor. http://ruslany.net/2008/09/aspnet-routing-request-filtering-url-rewriting/
Avatar billede torotune Nybegynder
16. august 2012 - 20:48 #4
Hej janus_007 - tak for links.

Jeg tror dog jeg får problemer denne vej da jeg ikke selv hoster min løsning. Den kører gennem Scannet og jeg får nok ikke lov at konfigurere IIS'en i så vid udstrækning, selvom der dog er begrænset adgang via Plesk.
Avatar billede keysersoze Guru
16. august 2012 - 23:27 #5
http://msdn.microsoft.com/en-us/library/cc668177.aspx

Men du skal vende den lidt om - som udgangspunkt vil ingen taste

/Default.aspx?ID=32

ind i adresselinjes og du skal ikke linke sådan. derimod må det forventes at links ser sådan ud

/rewritetest/32

og dem skal du så fange med din omskrivning og sende ned til fx din default-side og så behandle der. indtaster nogen første url bør du derimod have en 301 redirect til den nederste url.
Avatar billede torotune Nybegynder
17. august 2012 - 09:18 #6
Hej Keyser - mange tak for svar.


Jeg tror mit problem har været at "den skal vendes om" som du siger. Dvs. links skal omskrives til den anden form...

Men problemet er, at hvis det skal lægges ind over et eksisterende projekt vil der stadig være mange links oprettet som ser ud som eksempelvis: Default.aspx?ID=32

Dem vil man vel være nødt til at fange, og omskrive til den nye form. Vil det skulle gøres i eksempelvis Global.asax under application_beginrequest-metoden, hvor jeg så omskriver og 301-redirecter til den nye form?
Avatar billede keysersoze Guru
18. august 2012 - 18:59 #7
det er lidt svært at svære på når du ikke fortæller hvordan de er oprettet - men det bør være muligt at få rettet op på så alle links er korrekte.

Application_BeginRequest vil være et fint sted af fange uhensigtsmæssige links men der er ingen endelig opskrift på hvordan det absolut skal gøres.
Avatar billede torotune Nybegynder
30. august 2012 - 16:10 #8
Hej igen, jeg er kommet igennem det nu, det var et kæmpe arbejde fordi det var en eksisterende løsning, men nu virker det.

Er der muliged for at skjule nogle values hvis jeg f.eks.
har

http://www.minside.dk/264/general/about-us

Her er jeg ikke så interesseret i at vise 264, men det er alligevel et ID jeg bruger på min side til at trække noget indhold fra databasen via RouteData.Values("ID")

Kan jeg skjule dette i url'en, men stadig tilgå det?
Avatar billede keysersoze Guru
30. august 2012 - 22:23 #9
hvis det ikke står i din URL kan du ikke få fat i værdien medmindre du laver en specifik regel til at håndtere den enkelte URL.
Avatar billede torotune Nybegynder
02. september 2012 - 18:58 #10
Jeg siger mange tak for hjælpen.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester