【发布时间】:2014-01-08 11:24:01
【问题描述】:
假设我们要将旧版本的 asp.net web 表单转换为 mvc 架构。 但有些用户已将我们的网址添加为书签,或者将其链接到其他网站。 现在我们不想放弃那个 urls。相反,我们想创建一个自定义路由来管理旧类型的 url。 这个类从用户那里获取旧的 url 并创建一个新的路由并将用户重定向到新页面。 这是我的自定义路由类:
public class LegacyRoute:RouteBase
{
private string[] urls;
public LegacyRoute(params string[] targetUrls)
{
urls = targetUrls;
}
public override RouteData GetRouteData(HttpContextBase httpContext)
{
RouteData result = null;
string requestedURL =
httpContext.Request.AppRelativeCurrentExecutionFilePath;
if (urls.Contains(requestedURL,StringComparer.OrdinalIgnoreCase))
{
result = new RouteData(this, new MvcRouteHandler());
result.Values.Add("controller", "Legacy");
result.Values.Add("action", "GetLegacyUrl");
result.Values.Add("legacyUrl", requestedURL);
}
return result;
}
public override VirtualPathData GetVirtualPath(RequestContext requestContext, RouteValueDictionary values)
{
return null;
}
}
这是我的 RegisterRoutes 函数:
public static void RegisterRoutes(RouteCollection routes)
{
// routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
routes.Add(new LegacyRoute("~/articles/windows_3.1_Overview.html", "~/old/.NET_1.0_Class_Library"));
routes.MapRoute(null, "{controller}/{action}/{id}", new { controller = "Home", action = "Index", id = UrlParameter.Optional });
}
我还创建了“Legacy”控制器和“GetLegacyUrl”动作。 但是当我运行网站并输入
"localhost:14786/articles/windows_3.1_Overview.html"
在我的浏览器中,我收到 404 Not Found 错误。 问题出在哪里?为什么会出现此错误?
【问题讨论】:
标签: asp.net-mvc routes asp.net-mvc-routing