我是MVC(和ASP.Net路由)的新手。我正在尝试将*.aspx
映射到名为PageController
的控制器。
routes.MapRoute(
"Page",
"{name}.aspx",
new { controller = "Page", action = "Index", id = "" }
);
上面的代码不会将* .aspx映射到PageController
吗?当我运行它并输入任何.aspx页面时,我收到以下错误:
无法找到路径'/Page.aspx'的控制器,或者它没有实现IController接口。 参数名称:controllerType
我有没有在这里做的事情?
答案 0 :(得分:6)
我刚刚回答了我自己的问题。我向后退了路线(默认在页面上方)。以下是正确的订单。所以这就提出了下一个问题......“默认”路由如何匹配(我假设他们在这里使用正则表达式)“Page”路由?
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
);
答案 1 :(得分:6)
我刚刚回答了我自己的问题。我有 路线向后(默认为 上页)。
是的,您必须将所有自定义路线放在默认路线上方。
所以这提出了下一个问题...... “默认”路线如何匹配(I 假设他们使用正则表达式 这里的“Page”路线?
默认路由根据我们称之为约定优于配置的内容进行匹配。 Scott Guthrie在他关于ASP.NET MVC的第一篇博文中很好地解释了这一点。我建议你仔细阅读它以及其他帖子。请记住,这些是基于第一个CTP发布的,并且框架已经更改。您还可以在Scott.net网站的asp.net网站上找到ASP.NET MVC上的网络广播。
答案 2 :(得分:1)
在Rob Conery的一个MVC店面screencasts中,他遇到了这个问题。如果你感兴趣,它大概在23分钟左右。
答案 3 :(得分:0)
不确定控制器的外观,错误似乎指向无法找到控制器的事实。在创建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.");
}
}
}
答案 4 :(得分:0)
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"
);
测试路线