ASP.NET MVC 中如何处理 ASP.NET WebForm 或其他历史遗留的 URL
2012-05-21 18:54
651 查看
当一个网站从 ASP.NET WebForm 转为 ASP.NET MVC 后,那些 URL 怎么办呢?
比如,原来通过 ~/articles/may/zebra-danio-health-tips.html 能访问某一个页面,那现在转为 ASP.NET MVC 了怎么办呢?
直接贴代码了:
1. 新建一个类,继承 RouteBase 类。
2. 新建一个 List 泛型类的扩展方法。
3. 在 Global.asax 配置路由
运行效果:
谢谢浏览!
比如,原来通过 ~/articles/may/zebra-danio-health-tips.html 能访问某一个页面,那现在转为 ASP.NET MVC 了怎么办呢?
直接贴代码了:
1. 新建一个类,继承 RouteBase 类。
namespace DearBruce.LegacyUrlsRoute.MvcUI.Extensions { using System; using System.Collections; using System.Collections.Generic; using System.Web; using System.Web.Routing; using System.Web.Mvc; public class LegacyUrlsRoute : RouteBase { //可以从数据库中读取出原来的地址 private static IList<string> legacyUrls = new List<string>() { "~/articles/may/zebra-danio-health-tips.html", "~/articles/VelociraptorCalendar.pdf", "~/guides/tim.smith/BuildYourOwnPC_final.asp" }.ToElementLower(); public override RouteData GetRouteData(HttpContextBase httpContext) { string url = httpContext.Request.AppRelativeCurrentExecutionFilePath.ToLower(); if (legacyUrls.Contains(url)) { RouteData rd = new RouteData(this, new MvcRouteHandler()); rd.Values.Add("controller", "Home"); rd.Values.Add("action", "Old"); rd.Values.Add("url", url); return rd; } else { return null; // Not a legacy URL } } public override VirtualPathData GetVirtualPath(RequestContext requestContext, RouteValueDictionary values) { return null; } } }
2. 新建一个 List 泛型类的扩展方法。
namespace DearBruce.LegacyUrlsRoute.MvcUI.Extensions { using System; using System.Collections.Generic; public static class ListExtensions { /// <summary> /// 返回每个小写的元素 /// </summary> /// <param name="items"></param> /// <returns></returns> public static IList<string> ToElementLower(this IList<string> items) { if (items == null || items.Count == 0) { return items; } for (int i = 0; i < items.Count; i++) { items[i] = items[i].ToLower(); } return items; } } }
3. 在 Global.asax 配置路由
public static void RegisterRoutes(RouteCollection routes) { routes.IgnoreRoute("{resource}.axd/{*pathInfo}"); routes.Add("LegacyUrls", new DearBruce.LegacyUrlsRoute.MvcUI.Extensions.LegacyUrlsRoute()); routes.MapRoute( "Default", // 路由名称 "{controller}/{action}/{id}", // 带有参数的 URL new { controller = "Home", action = "Index", id = UrlParameter.Optional } // 参数默认值 ); }
运行效果:
谢谢浏览!
相关文章推荐
- 七天学会ASP.NET MVC (六)——线程问题、异常处理、自定义URL
- 为解决ASP.NET MVC(CTP)中URL“页面请求”和“单纯逻辑处理请求”混淆问题,提供一条思路
- Asp.Net Mvc 应用程序如何应对不同的URL地址?????,问题解决了
- asp.net mvc关于提供的防伪标记适用于其他基于声明的用户,而不适用于当前用户错误的处理
- 七天学会ASP.NET MVC (六)——线程问题、异常处理、自定义URL 【转】
- Asp.net Mvc 请求是如何到达 MvcHandler的——UrlRoutingModule、MvcRouteHandler分析,并造个轮子
- 重建程序员能力(2)-如何使asp.net mvc应用增加js和其他功能
- 如何在ASP.NET MVC 中获取当前URL、controller、action
- 七天学会ASP.NET MVC (六)——线程问题、异常处理、自定义URL
- ASP.NET MVC是如何运行的[2]: URL路由
- Asp.net Mvc 请求是如何到达 MvcHandler的——UrlRoutingModule、MvcRouteHandler分析,并造个轮子
- ASP.NET WebForm Form表单如何实现MVC那种“自动装配”效果呢?
- ASP.NET WebForm 之 Ajax 请求后端处理 概述 ASP.NET 在MVC中的用途非常广泛,操作起来也非常简单。前台请求异步请求 Controlle
- 七天学会ASP.NET MVC (六)——线程问题、异常处理、自定义URL
- 深入Asp.net MVC路由(一):从URL到处理程序
- 如何开发ASP.NET MVC异步式(Async)处理应用
- asp.net mvc中如何处理字符串与对象之间的序列化与反序列化(一)
- ASP.NET WebForm Form表单如何实现MVC那种“自动装配”效果呢?
- Asp.net MVC 如何对所有用户输入的字符串字段做Trim处理
- ASP.NET WebForm Form表单如何实现MVC那种“自动装配”