ASP.NET MVC 3 - 这条路线发生了什么?

时间:2012-01-12 15:40:08

标签: asp.net asp.net-mvc asp.net-mvc-3

我正在学习ASP.NET MVC 3并对自定义路由有疑问。

如果我在Global.asax.cs文件中并创建这样的路由:

routes.MapRoute(
                "CustomRoute",
                "controller/{name}",
                new { controller = "MyControllerName", action = "Search", id = UrlParameter.Optional }
            );

我假设这意味着我需要在URL中明确地使用“控制器”这个词,然后导致一个名为“name”的占位符(这将作为一种变量,可以接受发生的任何事情)在URL的下一部分中的那个位置)。

如果我在'controller'周围有大括号 - 就像在{controller}那样 - 然后将'controller'变成一个占位符(变量?),然后它将接受该点在URL中出现的任何值。

这是对的吗?我使用“占位符”一词是因为缺少一个更好的词 - 这个名字的实际名称是什么?

2 个答案:

答案 0 :(得分:1)

你通常是正确的。

大括号中的所有单词都将被视为URL的可变部分,其中大部分将作为输入参数传递给匹配的控制器操作。 controlleraction是路由中的特殊变量名称 - 它们将分别用于确定Controller和Action名称。

例如,假设你有路线

routes.MapRoute(
                "default",
                "{controller}/{action}/{id}",
                new { controller = "MyControllerName", action = "Search", id = UrlParameter.Optional }
            );

示例匹配和相应的操作:

http://example.com/yourapp/Sample/Test/5将解析为控制器SampleControllerController将自动添加),操作Test。如果这个动作像

那样lloks
public ActionResult Test(int id)
{
...
}

然后id参数在方法中的值为5。

http://example.com/yourapp/Sample/Test将被解析为同一行动

http://example.com/yourapp/Sample会指向Search的行动SampleController

最后,http://example.com/yourapp/会指向Search上的MyControllerNameController行动。

答案 1 :(得分:0)

这是一个有趣的问题。我相信使用“controller”,“action”和“id”这两个词是ASP.NET MVC“约定优于配置”的一部分。正如你所说,它们只是占位符变量。只要在整个应用程序中命名控制器时与命名约定(参数默认值)一致,就可以使用其他变量名称作为URL的各个部分。例如

routes.MapRoute(
    "Index",
    "{foobar}/{action}/{id}",
    new { foobar= "Home", action = "Index", id= UrlParameter.Optional }
);

当然,您必须将您的家庭控制器命名为“HomeFoobar”,并且所有其他控制器都必须命名为“NameFoobar”。您的“Foobar”控制器仍然必须从Controller继承。

如果你不在url参数名称周围使用{curly_braces},你将收到以下错误

  '/'应用程序中的服务器错误。      

无法找到资源。描述:HTTP 404.资源你   正在寻找(或其中一个依赖)可能已被删除,   更改名称,或暂时不可用。请查阅   以下URL并确保拼写正确。

     

请求的网址:/

     

----------------------------------------------- ---------------------------------版本信息:Microsoft .NET Framework版本:4.0.30319;   ASP.NET版本:4.0.30319.272