Genelde içeriği bol olan sitelerde http://.../hede/hode/1 (*) gibi linklerin olduğunu görürüz. Bizler ise gendle http://.../hede/hode.aspx?bisi=1 gibi QueryString ifadelerinden yararlanarak içeriği kullanıcıya yansıtırız.
Peki asp.net'te (*) daki gibi bir kullanımı nasıl sağlarız. Bunun için HttpHandler dan yararlanmak lazım - dikkat ederseniz uzantı yok url'de. Bu durumda IIS hemen 404 hatasını yollayacaktır kullanıcıya- Ama birçoğumuz sitelerimizde IIS'a müdahale edemiyoruz. Peki ne yapabiliriz bu durumda. En iyisi bir HttpModule yazıp linklerimizi http://.../hede/hode/1.aspx şeklinde düzenleyebiliriz. (Aslında yapmak istediğimiz http://.../hede/hode.aspx?bisi=1 dir.) Bunun için HttpContext sınıfının RewritePath metodundan yararlanabiliriz. HttpModule konusu ile ilgili bilgileri şurdaki linkten edinebilirsiniz.
using System; using System.Collections.Generic; using System.Text; using System.Web; namespace rewmod { class hede : IHttpModule { public void Dispose(){}public void Init( HttpApplication context ) { context.BeginRequest += new EventHandler(context_BeginRequest); } void context_BeginRequest( object sender, EventArgs e ) { string makalePattern = "makale/"; string oldUrl = HttpContext.Current.Request.Path; int startIndex = oldUrl.IndexOf(makalePattern); if (startIndex != -1) { int endIndex = oldUrl.IndexOf(".aspx"); if (endIndex != -1) { startIndex += makalePattern.Length; string makaleNumber = oldUrl.Substring(startIndex, endIndex - startIndex); HttpContext.Current.RewritePath("~/amac.aspx?id=" + makaleNumber); } } }} }
web.config içeriği...<system.web> <httpModules> <add name="hede" type="rewmode.hede"></add> </httpModules>....
Remember Me