ASP.Net MVC路由映射

时间:2008-08-15 03:25:32

标签: c# asp.net asp.net-mvc routing

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

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

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

  

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

我有没有在这里做的事情?

5 个答案:

答案 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"
               );

您可以按MvcRouteVisualizer

测试路线