国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁(yè) > 學(xué)院 > 開(kāi)發(fā)設(shè)計(jì) > 正文

WebForms使用System.Web.Routing

2019-11-17 03:55:55
字體:
來(lái)源:轉(zhuǎn)載
供稿:網(wǎng)友
老趙同學(xué)寫(xiě)過(guò) 在Web應(yīng)用程序開(kāi)發(fā)過(guò)程中利用asp.net MVC框架的實(shí)戰(zhàn)技巧 ,Routing現(xiàn)在可以作為URLRewriting技術(shù)的替代者,出現(xiàn)在asp.net mvc框架中,將它應(yīng)用于WebForms上也是很簡(jiǎn)單的,可以到codeplex上下載ASP.NET MVC WebFormRouting Demo 。

實(shí)現(xiàn)的原理也是很簡(jiǎn)單的:

1、創(chuàng)建一個(gè)自定義的實(shí)例化你的頁(yè)面的 IRouteHandler   

     1: public class WebFormRouteHandler : IRouteHandler {

   2:  
        public
WebFormRouteHandler(string
virtualPath)   3:  
            : this
(virtualPath, true
) {   4:  
        }   5:  
    6:  
        public
WebFormRouteHandler(string
virtualPath, bool
checkPhysicalUrlaccess) {   7:  
            if
(virtualPath == null
) {   8:  
                throw
new
ArgumentNullException("virtualPath"
);   9:  
            }  10:  
   11:  
            if
(!virtualPath.StartsWith("~/"
)) {  12:  
                throw
new
ArgumentException("virtualPath must start with a tilde slash: /"~//""
, "virtualPath"
);  13:  
            }  14:  
   15:  
            this
.VirtualPath = virtualPath;  16:  
            this
.CheckPhysicalUrlAccess = checkPhysicalUrlAccess;  17:  
        }  18:  
   19:  
        /// <summary>
  20:  
        /// This is the full virtual path (using tilde syntax) to the WebForm page.
  21:  
        /// </summary>
  22:  
        /// <remarks>
  23:  
        /// Needs to be thread safe so this is only settable via ctor.
  24:  
        /// </remarks>
  25:  
        public
string
VirtualPath { get; PRivate
set; }  26:  
   27:  
        /// <summary>
  28:  
        /// Because we're not actually rewriting the URL, ASP.NET's URL Auth will apply
  29:  
        /// to the incoming request URL and not the URL of the physical WebForm page.
  30:  
        /// Setting this to true (default) will apply URL access rules against the
  31:  
        /// physical file.
  32:  
        /// </summary>
  33:  
        /// <value>True by default</value>
  34:  
        public
bool
CheckPhysicalUrlAccess { get; set; }  35:  
   36:  
        public
IHttpHandler GetHttpHandler(RequestContext requestContext) {  37:  
            string
virtualPath = GetSubstitutedVirtualPath(requestContext);  38:  
            if
(this
.CheckPhysicalUrlAccess && !UrlAuthorizationModule.CheckUrlAccessForPrincipal(virtualPath, requestContext.HttpContext.User, requestContext.HttpContext.Request.HttpMethod))  39:  
                throw
new
SecurityException();  40:  
   41:  
            var page = BuildManager.CreateInstanceFromVirtualPath(virtualPath, typeof
(Page)) as
IHttpHandler;  42:  
            if
(page != null
) {  43:  
                //Pages that don't implement IRoutablePage won't have the RequestContext
  44:  
                //available to them. Can't generate outgoing routing URLs without that context.
  45:  
                var routablePage = page as
IRoutablePage;  46:  
                if
(routablePage != null
)  47:  
                    routablePage.RequestContext = requestContext;  48:  
            }  49:  
            return
page;  50:  
        }  51:  
   52:  
        /// <summary>
  53:  
        /// Gets the virtual path to the resource after applying substitutions based on route data.
  54:  
        /// </summary>
  55:  
        /// <param name="requestContext"></param>
  56:  
        /// <returns></returns>
  57:  
        public
string
GetSubstitutedVirtualPath(RequestContext requestContext) {  58:  
            if
(!VirtualPath.Contains("{"
))  59:  
                return
VirtualPath;  60:  
   61:  
            //Trim off ~/
  62:  
            string
virtualPath = VirtualPath.Substring(2);  63:  
   64:  
            Route route = new
Route(virtualPath, this
);  65:  
            VirtualPathData vpd = route.GetVirtualPath(requestContext, requestContext.RouteData.Values);  66:  
            if
(vpd == null
)  67:  
                return
VirtualPath;  68:  
            return
"~/"
+ vpd.VirtualPath;  69:  
        }  70:  
    }2、使用自定義的 IRouteHandler注冊(cè)一個(gè)新的Routes

   1:  
public
class
Global : System.Web.Httpapplication   2:  
    {   3:  
    4:  
        protected
void
Application_Start(object
sender, EventArgs e)   5:  
        {   6:  
            RegisterRoutes(RouteTable.Routes);   7:  
        }   8:  
    9:  
        public
static
void
RegisterRoutes(RouteCollection routes)  10:  
        {  11:  
            //We are intentionally creating this backdoor as a demonstration of
  12:  
            //bad security practices.
  13:  
            routes.MapWebFormRoute("Secret"
, "BackDoor"
, "~/Admin/SecretPage.aspx"
, false
);  14:  
            routes.MapWebFormRoute("Blocked"
, "FrontDoor"
, "~/Admin/SecretPage.aspx"
, true
);  15:  
   16:  
            //Even though we are not checking physical url access in this route, it should still block because the incoming
  17:  
            //request url would start with /Admin.
  18:  
            routes.MapWebFormRoute("Admin"
, "Admin/{*anything}"
, "~/Admin/SecretPage.aspx"
, false
);  19:  
   20:  
            routes.MapWebFormRoute("Named"
, "foo/bar"
, "~/forms/blech.aspx"
);  21:  
            routes.MapWebFormRoute("Numbers"
, "one/two/three"
, "~/forms/haha.aspx"
);  22:  
              23:  
            //Maps any requests for /haha/*.aspx to /forms/hahah.aspx
  24:  
            routes.MapWebFormRoute("Substitution"
, "haha/{filename}"
, "~/forms/haha.aspx"
);  25:  
        }  26:  
    }相關(guān)文章:

<span id="ctl00_ArticleTopHeader_ArticleTitle" class="ArticleTopTitle">Fight 404 errors with ASP.NET Routing :<a href="http://www.codeproject.com/KB/aspnet/routing404.aspx">http://www.codeproject.com/KB/aspnet/routing404.aspx</a></span>

msdn雜志文章:
使用 ASP.NET Web 窗體路由:http://msdn.microsoft.com/zh-cn/magazine/2009.01.extremeaspnet.aspx


本文來(lái)自CSDN博客,轉(zhuǎn)載請(qǐng)標(biāo)明出處:http://blog.csdn.net/dz45693/archive/2009/12/22/5058018.aspx
發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 若羌县| 高碑店市| 会泽县| 丘北县| 闻喜县| 靖远县| 建瓯市| 肥城市| 垫江县| 长岛县| 兴和县| 白银市| 黔南| 河北区| 周口市| 虎林市| 德州市| 乳山市| 庆云县| 木里| 景泰县| 丽江市| 格尔木市| 巴中市| 绵竹市| 诸暨市| 和林格尔县| 西丰县| 贡山| 河北区| 凤台县| 尉犁县| 海原县| 公安县| 陇西县| 科尔| 泗洪县| 鸡东县| 双柏县| 南江县| 岑巩县|