WebForms custom / dynamic routing

前端 未结 2 738
时光取名叫无心
时光取名叫无心 2021-01-07 09:44

I\'m using Phil Haack\'s URL routing for WebForms and I would like to define a route that\'s \"dynamic.\" Let\'s say I have this route:

\"{any}.aspx\" -- goes to -->

2条回答
  •  一向
    一向 (楼主)
    2021-01-07 10:25

    It's in VB but this is how I do it:

     Routes.Add("Root", New Route("{*URLRequest}", New myRootRouteHandler()))
    

    This does the same as yours, it catches the entire request but it then passes it off to my own custom route handler class:

    Imports System.Web.Routing
    Imports System.Security
    Imports System.Web.Compilation
    Imports System.Web
    
    Public Class myRootRouteHandler
      Implements IRouteHandler
      Implements IRequiresSessionState
    
      Private Path As String
    
      Public Function GetHttpHandler(ByVal requestContext As RequestContext) As IHttpHandler Implements IRouteHandler.GetHttpHandler
        Dim url As String = Web.HttpContext.Current.Request.ServerVariables("SERVER_NAME")
        Dim Key As String = requestContext.RouteData.Values("URLRequest")
        Dim myConfig As New LoadMyConfig(url)
        Dim aspxToLoad As String = myConfig.getPageVirtualPath(Key)
        Dim page As myCustom_Page_Base = TryCast(BuildManager.CreateInstanceFromVirtualPath(aspxToLoad, GetType(myCustom_Page_Base)), myCustom_Page_Base)
    
        page.RequestContext = requestContext
        page.strRequestContext = Key
        page.mySettings = myConfig
    
        Return page
    
    End Function
    

    In my example I have overloaded System.ui.page so that every aspx page in my project can inherit certain properties automatically like for example the mySettings object which contains my apps settings.. This is why I dim page as myCustom_Page_Base, you can load it as a standard page.

    The important bit is: BuildManager.CreateInstanceFromVirtualPath method this will load whatever aspx file you point to it..

    Hope this helps..

提交回复
热议问题