gpt4 book ai didi

System.Web.Routing入门及进阶(二)

转载 作者:qq735679552 更新时间:2022-09-29 22:32:09 28 4
gpt4 key购买 nike

CFSDN坚持开源创造价值,我们致力于搭建一个资源共享平台,让每一个IT人在这里找到属于你的精彩世界.

这篇CFSDN的博客文章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默认提供了一个IRouteHandler-StopRoutingHandler 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程序代码下载:  WebApplication3.rar 。

最后此篇关于System.Web.Routing入门及进阶(二)的文章就讲到这里了,如果你想了解更多关于System.Web.Routing入门及进阶(二)的内容请搜索CFSDN的文章或继续浏览相关文章,希望大家以后支持我的博客! 。

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com