我正在学习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中出现的任何值。
这是对的吗?我使用“占位符”一词是因为缺少一个更好的词 - 这个名字的实际名称是什么?
答案 0 :(得分:1)
你通常是正确的。
大括号中的所有单词都将被视为URL的可变部分,其中大部分将作为输入参数传递给匹配的控制器操作。 controller
和action
是路由中的特殊变量名称 - 它们将分别用于确定Controller和Action名称。
例如,假设你有路线
routes.MapRoute(
"default",
"{controller}/{action}/{id}",
new { controller = "MyControllerName", action = "Search", id = UrlParameter.Optional }
);
示例匹配和相应的操作:
http://example.com/yourapp/Sample/Test/5
将解析为控制器SampleController
(Controller
将自动添加),操作Test
。如果这个动作像
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},你将收到以下错误
2>'/'应用程序中的服务器错误。无法找到资源。描述:HTTP 404.资源你 正在寻找(或其中一个依赖)可能已被删除, 更改名称,或暂时不可用。请查阅 以下URL并确保拼写正确。
请求的网址:/
----------------------------------------------- ---------------------------------版本信息:Microsoft .NET Framework版本:4.0.30319; ASP.NET版本:4.0.30319.272