Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ruby-on-rails-3/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
ASP.NET MVC 3-此路由发生了什么变化?_Asp.net_Asp.net Mvc_Asp.net Mvc 3 - Fatal编程技术网

ASP.NET MVC 3-此路由发生了什么变化?

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 }

我正在学习ASP.NETMVC3,对自定义路由有一个问题

如果我在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的可变部分,其中大部分将作为输入参数传递给匹配的控制器操作<代码>控制器和
操作
是路由中的特殊变量名称-它们将分别用于确定控制器和操作名称

例如,假设你有路线

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/,或者解释它是根。有人可能会认为这是路线的一部分。