asp.net mvc 中 一种简单的 URL 重写
asp.net mvc 中 一种简单的 URL 重写Intro在项目中想增加一个公告的功能,但是又不想直接用默认带的那种路由,感觉好low逼,想弄成那种伪静态化的路由 (别问我为什么不直接静态化,当时就是只想做成伪静态化以后可能会做成完全静态化),至于为什么做伪静态化或静态化可以自行百度或参考本文最后 Q&A 部分。 How to doStep0 注册路由在注册默认路由前添加自己的重写路由,如下所示的 “Notice routes” 所示,第一个参数是 路由名称,请保持在整个Web应用中唯一,第二个参数是 url,提供一个你想要重写的 url 模板,模板参数放在 “{” 和 “}”之间, 第三个参数是设置是重写指向的 controller 和 action(有时只指定 controller,看重写需求),namespace指定需要处理的 controller 所在命名空间,当只有一个区域时可以不写,多个区域的时候最好显式指定对应的命名空间,防止路由冲突。 【注:新增的路由必须放在默认路由前面,不然不会有效果】 1 public static void RegisterRoutes(RouteCollection routes) 2 { 3 routes.IgnoreRoute("{resource}.axd/{*pathInfo}"); 4 //notice route 5 routes.MapRoute(Notice",Notice/{path}new { controller = HomeNoticeDetails" },namespaces: new string[] { ActivityReservation.Controllers }); 6 default route 7 routes.MapRoute( 8 name: Default, 9 url: {controller}/{action}/{id}10 defaults: Index UrlParameter.Optional },1)">11 namespaces: },1)">12 constraints:new { id = @"d*} 13 ); 14 } ? Step1 编写控制器处理代码在上一步注册路由的过程中,我们指定了处理的 controller(和 action ),接下来就需要在 controller 中处理请求了。 controller 中处理代码示例如下: 1 /// <summary> 2 /// 公告详情 3 </summary> 4 <param name="path">访问路径</param> 5 <returns></returns> public ActionResult NoticeDetails(string path) { 8 if (String.IsNullOrEmpty(path)) 9 { 10 return RedirectToAction(11 } 12 try 14 var notice = new Business.BLLNotice().GetOne(n => n.NoticePath == path); 15 if (notice != null) 16 { 17 return View(notice); 18 } 19 else 20 21 22 23 24 catch (Exception ex) 25 26 logger.Error(ex); 27 throw; 28 29 } ? 在定义路由的时候,定义了一个模板参数“path”,在处理的 action 中直接作为方法的参数处理就可以喽 Step2 调试代码,看重写效果如果可以出现如下图所示的页面,那么恭喜你,今天的 url 重写完成了。 Q&AQ:为什么我们要做(伪)静态化? A:站点下的 *.html 文件有利于网站的 SEO 优化,有利于百度和google爬虫爬你的网站,SEO做的好有利于提高搜索排名【SEO的水也很深、感兴趣的可以自己找资料研究】。 Q:什么是伪静态化?什么是完全静态化?他们的区别是什么? A:伪静态化是针对完全静态化来说的,(完全)静态化是会实际保存内容到一个 *.html 文件中,而伪静态化则是通过服务器端技术通过匹配 url 符合一定的模式就重新交给指定的程序处理并返回内容。 简单来说,(完全)静态化会有一个实际存在的静态文件,伪静态化则不存在,需要较多服务器端的处理。 Q:伪静态化和完全静态化哪个好? A:这个问题更好的问法应该是这样的:“什么时候适合用伪静态化?什么时候适合用完全静态化?”,一个事物既然存在就必然有它存在的道理,如果没有存在的意义必将死去。
End本文主要讲解了如何简单的做一个 mvc 中的 url 重写,实现了一个通知公告的伪静态化功能(以后可能会修改为完全静态化)。 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- asp.net – 用于Basic或Windows身份验证的无限重定向循环?
- 你能混用ASP和ASP.NET吗?
- asp.net-mvc – 在多租户应用程序中使用多个数据库模式
- 在ASP.net页面中嵌入SVG
- ASP.NET Core 2.0 入门
- asp.net-mvc – 使用jquery Ajax加载PartialView?
- asp.net – Oracle.ManagedDataAccess:TNS:无法解析指定的
- asp.net – CheckBoxList滚动条
- asp.net – 谷歌Chrome在崩溃后恢复会话cookie,如何避免?
- asp.net – 使用DataPager而不检索每个请求的所有行
- asp.net-mvc-3 – 无法加载文件或程序集’Struct
- asp.net-mvc-3 – 将开源CMS框架集成到现有的MVC
- asp.net-mvc – 使用Ajax在ASP.NET MVC的Kendo U
- asp.net-mvc – 无法在asp mvc项目中从iis上的Co
- asp.net-mvc-5 – 使用MVC属性路由的每个控制器的
- ILifetimeScope的autofac DependencyResolutionE
- asp.net-mvc-4 – MVC4 – 如何渲染视图字符串?
- asp.net-mvc – SignalR和MVC包
- asp.net – asp文本框限制字符数?
- asp.net-mvc-2 – 如何在自定义验证属性中为不同