ASP.NET MVC路由问题

时间:2009-07-23 18:25:14

标签: asp.net-mvc url-routing asp.net-mvc-routing

我刚开始使用ASP.NET MVC,我有两个路由问题。

  1. 如何设置以下路线 在ASP.NET MVC中?

    domain.com/about-us/
    domain.com/contact-us/
    domain.com/staff-bios/

    我不想在实际网址中指定控制器以保持网址更短。如果网址看起来像这样:

    domain.com/company/about-us/
    domain.com/company/contact-us/
    domain.com/company/staff-bios/
    

    这对我来说更有意义,因为我可以添加一个CompanyController并为about-us,contact-us,staff-bios设置ActionResults设置并返回适当的视图。我错过了什么?

  2. 名称“默认”名称在Global.asax的默认路由规则中有什么用途?它用于什么吗?

  3. 谢谢!

3 个答案:

答案 0 :(得分:3)

我先回答你的第二个问题 - “默认”只是路线的名称。如果您需要按名称引用路由,例如您希望从路由生成URL,则可以使用此选项。

现在,对于您要设置的URL,只要您没有指定与默认控制器相同的控制器,就可以绕过控制器参数。路线可能看起来像这样:

{action}/{page}

确保在其他路由之后声明它,因为这将匹配您不打算使用的许多URL,因此您希望其他路由首先对其进行破解。设置如下:

routes.MapRoute(null, "{action}/{page}", 
                 new { controller = "CompanyController", action = "Company", page = "contact-us" } );

当然,你的MyDefault控制器中的操作方法“公司”需要有一个“string page”参数,但这应该可以帮到你。您的公司方法只是检查View是否存在于页面参数是什么,如果不存在则返回404,如果没有则返回View。

答案 1 :(得分:0)

说到设置路线和Phil Haack,我发现他的Route Debugger非常宝贵。当您不理解为什么使用特定路由代替其他路由或学习如何设置特殊路由方案(例如您提到的那个)时,它是一个很好的工具。与其他任何资源相比,它有助于清除许多复杂的路径创建。

答案 2 :(得分:0)

要回答关于Global.asax的第二个问题,它是一个可选文件,用于响应ASP.NET或HTTP模块引发的应用程序级别和会话级事件。 Global.asax文件驻留在ASP.NET应用程序的根目录中。如果您没有定义它,则假定您尚未定义任何应用程序处理程序或会话处理程序。 MVC框架使用引擎中定义了路由规则的路由引擎,以便将传入的URL映射到正确的控制器。
从控制器,您可以访问ActionName。如果没有特定的控制器,它将指向默认页面。默认控制器为“Home”,其默认操作为“Index”。请参阅MSDN:

http://msdn.microsoft.com/en-us/library/2027ewzw%28v=vs.100%29.aspx

请参阅stackoverflow问题

What is global.asax used for?

这是默认路线应如何显示的样本

 routes.MapRoute(
            name: "Default",
            url: "{controller}/{action}/{id}",
            defaults: new { controller = "Home", action = "Index", id = 
  UrlParameter.Optional }
        );