[英]ASP.NET MVC 3 - What is happening with this route?
我正在学习ASP.NET MVC 3,并且对自定义路由有疑问。
如果我在Global.asax.cs文件中,并创建如下路由:
routes.MapRoute(
"CustomRoute",
"controller/{name}",
new { controller = "MyControllerName", action = "Search", id = UrlParameter.Optional }
);
我假设这意味着我将需要在URL中显式包含“ controller”一词,然后再导致一个名为“ name”的占位符(这将充当一种变量,可以吸收发生在URL的下一部分中的该位置)。
如果我在'controller'周围加上大括号(例如{controller}-),那么它将把'controller'变成一个占位符(变量?),该占位符随后将吸收URL上出现的任何值。
这个对吗? 我使用“占位符”一词是因为缺少更好的词-它的实际名称是什么?
您通常是正确的。
大括号中的所有单词将被视为URL的可变部分,并且大多数将作为输入参数传递给匹配的控制器动作。 controller
和action
是route中的特殊变量名称-它们将分别用于确定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
将指向Action Search
SampleController
。
最后, http://example.com/yourapp/
将指向对MyControllerNameController
操作Search
。
这是个有趣的问题。 我相信使用单词“ controller”,“ action”和“ id”是ASP.NET MVC“约定之上的约定”的一部分。 如您所说,它们只是占位符变量。 只要在整个应用程序中对控制器进行命名时,只要您与命名约定(参数默认值)一致,就可以对URL的各个部分使用其他变量名。 例如
routes.MapRoute(
"Index",
"{foobar}/{action}/{id}",
new { foobar= "Home", action = "Index", id= UrlParameter.Optional }
);
当然,现在您必须将Home控制器命名为“ HomeFoobar”,而所有其他控制器都必须命名为“ NameFoobar”。 您的“ Foobar”控制器仍然必须继承Controller。
如果您不在网址参数名称周围使用{curly_braces},则会出现以下错误
“ /”应用程序中的服务器错误。
无法找到该资源。 说明:HTTP404。您正在寻找的资源(或其依赖项之一)可能已被删除,名称更改或暂时不可用。 请查看以下网址,并确保其拼写正确。
要求的网址:/
-------------------------------------------------- ------------------------------版本信息:Microsoft .NET Framework版本:4.0.30319; ASP.NET版本:4.0.30319.272
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.