I have done this before using the http module. My example (stripped down) is in vb.net. I just check the status code 401 and do my own forwarding. The big trick here was that I had to remove and add web.config httpModules to make sure my httpmodule exited the url authorization module. In my case, I had some redrawing URLs for localization, and I needed to send the locale ID to the login page, because it was lost by the usual redirect in the URL authorization module. I used Reflector heavily to create a base path (not shown), as these are private methods.
Public Sub Init(ByVal context As System.Web.HttpApplication) Implements System.Web.IHttpModule.Init AddHandler context.EndRequest, AddressOf Context_EndRequest End Sub Private Sub Context_EndRequest(ByVal sender As Object, ByVal e As EventArgs) If TypeOf sender Is HttpApplication Then Dim hApplication As HttpApplication = DirectCast(sender, HttpApplication) Dim hContext As HttpContext = hApplication.Context If (hContext.Response.StatusCode = &H191) Then hContext.Response.Redirect(String.Format("{0}?ReturnUrl={1}&someparam2={2}", basepath, HttpUtility.UrlEncode(hContext.Request.RawUrl), someparam2)) End If End If End Sub
web.config changes
<httpModules> <clear/> <add name="SomeHttpModule" type="SomeCompany.SomeProduct.SomeHttpModule"/> <add name="OutputCache" type="System.Web.Caching.OutputCacheModule"/> <add name="Session" type="System.Web.SessionState.SessionStateModule"/> <add name="WindowsAuthentication" type="System.Web.Security.WindowsAuthenticationModule"/> <add name="FormsAuthentication" type="System.Web.Security.FormsAuthenticationModule"/> <add name="RoleManager" type="System.Web.Security.RoleManagerModule"/> <add name="UrlAuthorization" type="System.Web.Security.UrlAuthorizationModule"/> <add name="FileAuthorization" type="System.Web.Security.FileAuthorizationModule"/> </httpModules>
source share