ASP.NET MVC 3-此路由发生了什么变化?
我正在学习ASP.NETMVC3,对自定义路由有一个问题 如果我在Global.asax.cs文件中并创建如下路由:ASP.NET MVC 3-此路由发生了什么变化?,asp.net,asp.net-mvc,asp.net-mvc-3,Asp.net,Asp.net Mvc,Asp.net Mvc 3,我正在学习ASP.NETMVC3,对自定义路由有一个问题 如果我在Global.asax.cs文件中并创建如下路由: routes.MapRoute( "CustomRoute", "controller/{name}", new { controller = "MyControllerName", action = "Search", id = UrlParameter.Optional }
routes.MapRoute(
"CustomRoute",
"controller/{name}",
new { controller = "MyControllerName", action = "Search", id = UrlParameter.Optional }
);
我假设这意味着我需要在URL中显式地使用“controller”一词,这将导致一个名为“name”的占位符(它将作为一种变量,接收URL下一部分中该位置发生的任何事情)
如果我在“controller”(如,{controller})周围有一个花括号,那么它将把“controller”(控制器)变成一个占位符(变量?),然后接受URL中在该点出现的任何值
这是正确的吗?我之所以使用“占位符”一词,是因为没有更好的词——这个词的实际名称是什么?你基本上是对的 花括号中的所有单词将被视为URL的可变部分,其中大部分将作为输入参数传递给匹配的控制器操作<代码>控制器和
操作
是路由中的特殊变量名称-它们将分别用于确定控制器和操作名称
例如,假设你有路线
routes.MapRoute(
"default",
"{controller}/{action}/{id}",
new { controller = "MyControllerName", action = "Search", id = UrlParameter.Optional }
);
示例匹配和相应的操作:
http://example.com/yourapp/Sample/Test/5
将解析为控制器采样控制器
(控制器
将自动添加),操作测试
。如果这一行动像
public ActionResult Test(int id)
{
...
}
然后id
参数在方法中的值为5
http://example.com/yourapp/Sample/Test
将被解析为相同的操作
http://example.com/yourapp/Sample
将指向SampleController
的操作Search
最后,
http://example.com/yourapp/
将指向MyControllerNameController
上的操作Search
,这是一个有趣的问题。我相信,使用“控制器”、“操作”和“id”是ASP.NET MVCs“约定优于配置”的一部分。正如您所说,它们只是占位符变量。在整个应用程序中命名控制器时,只要符合命名约定(参数默认值),就可以对url的各个部分使用其他变量名。比如说
routes.MapRoute(
"Index",
"{foobar}/{action}/{id}",
new { foobar= "Home", action = "Index", id= UrlParameter.Optional }
);
当然,现在您必须将您的主控制器命名为“HomeFoobar”,并且所有其他控制器都必须命名为“NameFoobar”。您的“Foobar”控制器仍然必须从控制器继承
如果不在url参数名称周围使用{curly_brates},将出现以下错误
“/”应用程序中出现服务器错误。
找不到资源。描述:HTTP404。你需要的资源
正在查找的(或其依赖项之一)可能已被删除,
其名称已更改,或暂时不可用。请复习
请输入以下URL并确保其拼写正确
请求的URL:/
--------------------------------------------------------------------------------版本信息:Microsoft.NET Framework版本:4.0.30319;
ASP.NET版本:4.0.30319.272
我会从示例中删除/yourapp/,或者解释它是根。有人可能会认为这是路线的一部分。