繁体   English   中英

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

[英]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的可变部分,并且大多数将作为输入参数传递给匹配的控制器动作。 controlleraction是route中的特殊变量名称-它们将分别用于确定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 如果这个动作像

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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM