13

我是 MVC(和 ASP.Net 路由)的新手。我正在尝试映射*.aspx到一个名为PageController.

routes.MapRoute(
   "Page",
   "{name}.aspx",
   new { controller = "Page", action = "Index", id = "" }
);

上面的代码不会将 *.aspx 映射到PageController吗?当我运行它并输入任何 .aspx 页面时,我收到以下错误:

找不到路径“/Page.aspx”的控制器,或者它没有实现 IController 接口。参数名称:controllerType

有什么我不在这里做的吗?

4

5 回答 5

6

我只是回答了我自己的问题。我有向后的路线(默认在页面上方)。下面是正确的顺序。所以这带来了下一个问题......“默认”路由如何匹配(我假设他们在这里使用正则表达式)“页面”路由?

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
        );
于 2008-08-15T03:54:03.080 回答
6

我只是回答了我自己的问题。我有向后的路线(默认在页面上方)。

是的,您必须将所有自定义路由放在默认路由之上。

所以这带来了下一个问题......“默认”路由如何匹配(我假设他们在这里使用正则表达式)“页面”路由?

默认路由匹配基于我们所说的约定优于配置。Scott Guthrie 在他关于 ASP.NET MVC 的第一篇博文中很好地解释了这一点。我建议您通读它以及他的其他帖子。请记住,这些是基于第一个 CTP 发布的,并且框架已更改。您还可以在 Scott Hanselman 的 asp.net 站点上找到有关 ASP.NET MVC 的网络广播。

于 2008-08-15T04:24:44.190 回答
1

在 Rob Conery 的 MVC Storefront截屏视频中,他遇到了这个确切的问题。如果你有兴趣,它在 23 分钟左右。

于 2008-08-15T04:27:58.410 回答
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.");
        }
    }
}
于 2008-08-15T03:43:38.110 回答
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"
               );

您可以通过MvcRouteVisualizer测试路线

于 2011-01-30T01:41:16.560 回答