ASP.Net MVC 路由映射
Posted
技术标签:
【中文标题】ASP.Net MVC 路由映射【英文标题】:ASP.Net MVC route mapping 【发布时间】:2010-09-05 22:20:30 【问题描述】:我是 MVC(和 ASP.Net 路由)的新手。我正在尝试将*.aspx
映射到名为PageController
的控制器。
routes.MapRoute(
"Page",
"name.aspx",
new controller = "Page", action = "Index", id = ""
);
上面的代码不会将 *.aspx 映射到 PageController
吗?当我运行它并输入任何 .aspx 页面时,我收到以下错误:
找不到路径“/Page.aspx”的控制器,或者它没有实现 IController 接口。 参数名称:controllerType
有什么我没有在这里做的吗?
【问题讨论】:
【参考方案1】:我刚刚回答了我自己的问题。我有 向后的路线(默认为 上一页)。
是的,您必须将所有自定义路由放在默认路由之上。
所以这就引出了下一个问题…… “默认”路由如何匹配(我 假设他们使用正则表达式 这里)“页面”路线?
默认路由匹配基于我们所说的约定优于配置。 Scott Guthrie 在他关于 ASP.NET MVC 的第一篇博文中很好地解释了这一点。我建议您通读它以及他的其他帖子。请记住,这些是基于第一个 CTP 发布的,并且框架已更改。您还可以在 Scott Hanselman 的 asp.net 网站上找到有关 ASP.NET MVC 的网络广播。
http://weblogs.asp.net/scottgu/archive/2007/11/13/asp-net-mvc-framework-part-1.aspx http://www.asp.net/MVC/【讨论】:
【参考方案2】:我刚刚回答了我自己的问题。我有向后的路线(默认在页面上方)。下面是正确的顺序。所以这带来了下一个问题......“默认”路由如何匹配(我假设他们在这里使用正则表达式)“页面”路由?
routes.MapRoute(
"Page",
"Name.aspx",
new controller = "Page", action = "Display", id = ""
);
routes.MapRoute(
"Default", // Route name
"controller/action/id", // URL with parameters
new controller = "Home", action = "Index", id = "" // Parameter defaults
);
【讨论】:
【参考方案3】:在 Rob Conery 的 MVC Storefront screencasts 之一上,他遇到了这个确切的问题。如果您有兴趣,它大约在 23 分钟左右。
【讨论】:
【参考方案4】:不确定您的控制器的外观,该错误似乎指向它找不到控制器的事实。创建 PageController 类后,您是否继承了 Controller ? PageController 是否位于 Controllers 目录中?
这是我在 Global.asax.cs 中的路线
routes.MapRoute(
"Page",
"Page.aspx",
new controller = "Page", action = "Index", id = ""
);
这是我的控制器,它位于 Controllers 文件夹中:
using System.Web.Mvc;
namespace MvcApplication1.Controllers
public class PageController : Controller
public void Index()
Response.Write("Page.aspx content.");
【讨论】:
【参考方案5】:public class AspxRouteConstraint : IRouteConstraint
#region IRouteConstraint Members
public bool Match(HttpContextBase httpContext, Route route, string parameterName, RouteValueDictionary values, RouteDirection routeDirection)
return values["aspx"].ToString().EndsWith(".aspx");
#endregion
为所有aspx注册路由
routes.MapRoute("all",
"*aspx",//catch all url
new Controller = "Page", Action = "index" ,
new AspxRouteConstraint() //return true when the url is end with ".aspx"
);
你可以通过MvcRouteVisualizer测试路由
【讨论】:
以上是关于ASP.Net MVC 路由映射的主要内容,如果未能解决你的问题,请参考以下文章
IIS 6 上的 ASP.NET MVC - 通配符映射 - 传入请求与任何路由都不匹配
具有固定 URI 的 ASP.NET 路由不映射查询字符串参数
使用 MVC Contrib 测试 ASP.NET MVC 路由