1

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

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

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

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

    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 中的默认路由规则中的“默认”名称有什么用途?它有什么用吗?

谢谢!

4

3 回答 3

3

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

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

{action}/{page}

确保它是在你的其他路由之后声明的,因为这会匹配很多你不打算匹配的 URL,所以你希望其他路由首先对其进行破解。像这样设置它:

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

当然,您的 MyDefault 控制器中的操作方法“Company”需要有一个“ string page”参数,但这应该可以为您解决问题。无论页面参数是什么,您的 Company 方法都会简单地检查 View 是否存在,如果不存在则返回 404,或者如果存在则返回 View。

于 2009-07-23T18:38:28.960 回答
0

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

于 2009-07-23T18:54:09.087 回答
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问题

global.asax 是做什么用的?

这是默认路由的外观示例

 routes.MapRoute(
            name: "Default",
            url: "{controller}/{action}/{id}",
            defaults: new { controller = "Home", action = "Index", id = 
  UrlParameter.Optional }
        );
于 2018-02-16T12:13:28.587 回答