My intention is not for this to be a massive how-to on HTTP Modules - I think this little DLL is quite useful (I know that there are similar libraries out there that does mostly the same). Hopefully, posting it on Code Project will get it out to as many people as possible.
Rewrite class implements the
IHttpModule interface. This interface is bound to the ASP.NET app in the
httpModules section of the
System.Web section in the Web.Config.
Add this line to your
<system.web> section of your Web.Config file:
<add type="Rewriter.Rewrite, Rewriter" name="Rewriter" />
The interface is implemented as follows:
public class Rewrite : System.Web.IHttpModule
Init function of the interface wires up a
BeginRequest event handler. This ensures that as the page is requested, our custom handler intercepts the call, allowing us to replace the path with a new path.
public void Init(System.Web.HttpApplication Appl)
Dispose function is required by the interface.
public void Dispose()
BeginRequest handler sequence receives the
HttpApplication context through the
public void Rewrite_BeginRequest(object sender, System.EventArgs args)
System.Web.HttpApplication Appl = (System.Web.HttpApplication)sender;
string path = Appl.Request.Path;
string indicator = "/Content/";
... More Code ...
This gives the path that we can then process using the
GetTab function. This function queries the DotNetNuke TabController system to give us the correct Tab ID and subsequent path, given an original path. The indicator I use is a directory string "/Content/" to indicate that this is different from a normal query.
private string GetTab(string path, string indicator)
SendToNewUrl initiates a rewrite of the path. There are two mechanisms that are possible:
Context.RewritePath retains the URL that it is passed... E.g.: http://www.codeproject.com/Content/ExampleContent.aspx.
- whereas the
Response.Redirect drops the URL and redirects to the appropriate tab... E.g.: http://www.codeproject.com/Default.Aspx?tabid=5.
public void SendToNewUrl(string url, bool spider,
Fingers crossed, you guys get the gist of the system. This is not a difficult task, but hopefully will make your DotNetNuke sites a little easier for navigation or spidering.
GetTab function for more in depth string passing. I know I should have used regular expressions to get to the guts of it all..
There are plenty of additional ways to improve this functionality.
Finally, a big thank you goes out to the Code Project and DotNetNuke and their respective communities.