System.Web.Routing入门及进阶 下篇

简介: System.Web.Routing入门及进阶 上篇 上面介绍的是最简单的一种定义方式。当然我们可以建立更复杂的规则。其中就包括设定规则的默认值以及设定规则的正则表达式。 UrlRouting高级应用 预计效果: 当我访问/a/b.

 

System.Web.Routing入门及进阶 上篇

上面介绍的是最简单的一种定义方式。当然我们可以建立更复杂的规则。其中就包括设定规则的默认值以及设定规则的正则表达式。

UrlRouting高级应用

预计效果:

当我访问/a/b.aspx时就会转到Default.aspx?category = a&action = b在页面上显示
category:a
action:b

亦如果我访问/chsword/xxxx.aspx就会转到Default.aspx?category
= chsword&action = xxxx就会显示
category:chsword

action:xxxx

 

如果访问/chsword/就会转到 Default.aspx?category=chsword&action=index就会显示

 category:chsword

action:index

 

 首先我建立一个Route

routes.Add(
                
" Default " ,
                
new  Route( " {category}/{action}.aspx " ,
                          
new  RouteValueDictionary(
                              
new
                                  {
                                      file 
=   " Default " ,
                                      category 
=   " home " ,
                                      action 
=   " index "
                                  }), 
new  MyRouteHandler()
                    )
                );

当然IHttpHandler的处理方式也要有所改变

为了方便查看我使用了下方法:

 

    context.Server.Execute( string .Format( " /{0}.aspx?category={1}&action={2} " ,
              RequestContext.RouteData.Values.ContainsKey(
" file " )
                
?  RequestContext.RouteData.Values[ " file " ].ToString()
                : 
" default " ,
              RequestContext.RouteData.Values.ContainsKey(
" category " )
                
?  RequestContext.RouteData.Values[ " category " ].ToString()
                : 
"" ,
              RequestContext.RouteData.Values.ContainsKey(
" action " )
                
?  RequestContext.RouteData.Values[ " action " ].ToString()
                : 
"" )
                );

 

即/a/b.aspx是映射到Default.aspx?category=a&action=b

在Default.aspx中写如下代码:

 category: <% = Request.Params[ " category " %> < br  />
   action:
<% = Request.Params[ " action " %>

 

以显示传入的参数。

如果在IIS中设置Index.aspx时就算输入/a/也会访问到/a/index.aspx,即默认的会按RouteValueDictionary中设置的值自动补全

UrlRouting使用正则表达式规则

UrlRouting在定义的时候也可以按正则的规则来进行定义。

 

 

            routes.Add(
                
" zz " ,
                
new  Route( " {category}/{action}.chs " ,
                    
new  RouteValueDictionary(
                        
new  {
                            file 
=   " Default " ,
                            category 
=   " home " ,
                            action 
=   " 1 "
                        }),
                        
new  RouteValueDictionary(
                        
new  {
                            action 
=   " [\\d]+ "
                        }),
                    
new  MyRouteHandler()
                    )
            );

 

以上代码规定了action只能是数字则访问/a/1.chs可以正常访问。

而访问/a/b.chs则会显示未找到资源。

 

当然这是里可以使用更高级的正则表达式。

UrlRouting的技巧

排除UrlRouting的方法:

System.Web.Routing默认提供了一个IRouteHandlerStopRoutingHandler Class,经过它处理的URL不会被做任何处理

通常使用方法如下:

routes.Add(new Route("{resource}.axd/{*pathInfo}", new StopRoutingHandler()));

 

RouteHandler工厂:

其实IRouteHandler可以实现一个RouteHandler的简单工厂。

     public   class  RouteHandlerFactory : IRouteHandler
    {
        
string  Name {  get set ; }
        
public  RouteHandlerFactory( string  name){ this .Name  =  name;}
        
#region  IRouteHandler 成员
        
public  IHttpHandler GetHttpHandler(RequestContext requestContext) {
            
if  ( this .Name  ==   " mypage " )
                
return   new  MyPage(requestContext);
            
if ( this .Name = " mypage1 " )
                
return   new  MyPage1(requestContext);
        }
        
#endregion
    }

 

 规定HTTP verbs,这里要使用System.Web.Routing中的HttpMethodConstraint

 

void  Application_Start( object  sender, EventArgs e) {
    RegisterRoutes(RouteTable.Routes);
}
public   static   void  RegisterRoutes(RouteCollection routes){
    
string [] allowedMethods  =  {  " GET " " POST "  };
    HttpMethodConstraint methodConstraints 
=   new  HttpMethodConstraint(allowedMethods);
    Route reportRoute 
=   new  Route( " {locale}/{year} " new  ReportRouteHandler());
    reportRoute.Constraints 
=   new  RouteValueDictionary { {  " httpMethod " , methodConstraints } };
    routes.Add(reportRoute);
}

 

Demo程序代码下载:

 http://files.cnblogs.com/chsword/WebApplication3.rar

 

 

 

 

相关文章
Spring Boot 入门:简化 Java Web 开发的强大工具
Spring Boot 是一个开源的 Java 基础框架,用于创建独立、生产级别的基于Spring框架的应用程序。它旨在简化Spring应用的初始搭建以及开发过程。
112 7
Spring Boot 入门:简化 Java Web 开发的强大工具
【前端web入门第四天】02 CSS三大特性+背景图
本文详细介绍了CSS的三大特性:继承性、层叠性和优先级,并深入讲解了背景图的相关属性,包括背景属性、背景图的平铺方式、位置设定、缩放、固定以及复合属性。其中,继承性指子元素自动继承父元素的文字控制属性;层叠性指相同属性后定义覆盖前定义,不同属性可叠加;优先级涉及选择器权重,包括行内样式、ID选择器等。背景图部分则通过具体示例展示了如何设置背景图像的位置、大小及固定方式等。
288 91
【前端web入门第四天】01 复合选择器与伪类选择器
本文档详细介绍了CSS中的复合选择器与伪类选择器。复合选择器包括后代选择器、子代选择器、并集选择器和交集选择器,能够更精确地定位和样式化元素。后代选择器用于选中某元素的所有后代,子代选择器仅选中直接子元素。并集选择器可为多个标签设置相同样式,而交集选择器则选中同时满足多个条件的元素。此外,还介绍了伪类选择器,如鼠标悬停效果和超链接的不同状态。
96 32
【前端web入门第四天】01 复合选择器与伪类选择器
探索现代Web前端技术:React框架入门
【10月更文挑战第9天】 探索现代Web前端技术:React框架入门
【前端web入门第二天】03 表单-下拉菜单 文本域 label标签 按钮 【附注册信息综合案例】
本文档详细介绍了HTML表单的多种元素及其用法,包括下拉菜单(`&lt;select&gt;` 和 `&lt;option&gt;`)、文本域(`&lt;textarea&gt;`)、标签解释(`&lt;label&gt;`)、各类按钮(`&lt;button&gt;`)及表单重置功能、无语义布局标签(`&lt;div&gt;` 和 `&lt;span&gt;`)以及字符实体的应用。此外,还提供了一个完整的注册信息表单案例,涵盖个人信息、教育经历和工作经历等部分,展示了如何综合运用上述元素构建实用的表单。
【前端web入门第二天】03 表单-下拉菜单 文本域 label标签 按钮 【附注册信息综合案例】
【前端web入门第三天】02 CSS字体和文本
本文详细介绍了CSS中字体和文本的相关属性。字体部分涵盖字体大小、粗细、样式、行高、字体族及`font`复合属性,通过具体示例展示了如何设置和使用这些属性。文本部分则讲解了文本缩进、对齐方式、修饰线及文字颜色等属性,并提供了实用的代码示例。此外,还简要介绍了调试工具中的一些细节,如错误属性标识和属性生效状态的控制。
98 28
【前端web入门第二天】01 html语法实现列表与表格_合并单元格
本文介绍了HTML中的列表与表格的使用方法。列表包括无序列表(`&lt;ul&gt;`嵌套`&lt;li&gt;`)、有序列表(`&lt;ol&gt;`嵌套`&lt;li&gt;`)和定义列表(`&lt;dl&gt;`嵌套`&lt;dt&gt;`和`&lt;dd&gt;`)。
108 19
从零到一:Python Web框架中的模板引擎入门与进阶
在Web开发的广阔世界里,模板引擎是连接后端逻辑与前端展示的重要桥梁。对于Python Web开发者而言,掌握模板引擎的使用是从零到一构建动态网站或应用不可或缺的一步。本文将带你从基础入门到进阶应用,深入了解Python Web框架中的模板引擎。
92 3
【前端web入门第三天】01 css定义和引入方式 四种标签选择器
本文档详细介绍了CSS的基础知识及其应用。内容涵盖了CSS的定义、CSS在HTML中的引入方式,包括内部样式表、外部样式表及行内样式表的使用场景与方法。此外,还深入解析了不同种类的选择器:标签选择器、类选择器、ID选择器以及通配符选择器的功能与应用场景,并提供了实例帮助理解。最后,通过具体的新属性示例,指导如何使用这些选择器来实现基本的盒子绘制。适合初学者系统学习CSS。
88 15
Web实时通信的学习之旅:WebSocket入门指南及示例演示
Web实时通信的学习之旅:WebSocket入门指南及示例演示
459 0

热门文章

最新文章

AI助理

你好,我是AI助理

可以解答问题、推荐解决方案等