【发布时间】:2010-09-02 14:20:03
【问题描述】:
为了在我的应用程序中支持旧版 URL,我使用正则表达式将 /Repo/{ixRepo}/{sSlug}/{sAction} 形式的 URL 转换为新形式 /Repo/{sName}/{sAction},使用 ixRepo 来获得正确的 sName。这很好用,我可以使用 RedirectResult 将用户重定向到新 URL。
但是,我想在重定向用户之前捕获具有无效操作的旧 URL。如何验证 URL 字符串是否会映射到已注册的路由? MVC 显然在内部这样做是为了将请求映射到正确的操作,但我想手动完成。
到目前为止,我想出了这个:
var rd = Url.RouteCollection.GetRouteData(new HttpContextWrapper(new HttpContext(
new HttpRequest("", newPath, ""),
new HttpResponse(null))));
它似乎总是返回一个System.Web.Routing.RouteData,即使是糟糕的路线。我找不到方法来检查路由是否被接受为包罗万象,或者是否实际映射到控制器上注册的路由。
如何使用 MVC 的路由系统检查 URL 是否通过已注册的路由映射到有效的控制器/操作?
(我见过ASP.NET MVC - Verify the Existence of a Route,但这真的很不雅。MVC 内置了一个路由系统,我想使用它。)
【问题讨论】:
标签: asp.net-mvc