ASP.NET MVC路由Maproute参数

use*_*602 5 asp.net-mvc asp.net-mvc-routing

我正在接受MVC routing frame work.我对RouteCollection.MapRoute方法所采用的参数感到有点困惑.

如果我采取了以下请求的传统示例

public class MvcApplication : System.Web.HttpApplication
{
    public static void RegisterRoutes(RouteCollection routes)
    {
        routes.IgnoreRoute("{resource}.axd/{*pathInfo}");

 - List item

        routes.MapRoute(
            "Default",                                              // Route name
            "{controller}/{action}/{id}",                           // URL with parameters
            new { controller = "Home", action = "Index", id = "" }  // Parameter defaults
        );

    }

    protected void Application_Start()
    {
        RegisterRoutes(RouteTable.Routes);
    }
}
Run Code Online (Sandbox Code Playgroud)

它使用以下签名进行映射

public static Route MapRoute(
    this RouteCollection routes,
    string name,
    string url,
    Object defaults
)
Run Code Online (Sandbox Code Playgroud)

我的问题是关于"对象默认值",

  1. 为什么我们使用它 new { controller = "Home", action = "Index", id = "" }
  2. 这是固定格式吗?
  3. 怎么能CLR interpret sequence参数?

跟进问题:

一个.为什么我们在一个括号{}内装饰控制器,动作或id?

湾 URL指定和默认值之间是否有匹配?

SBi*_*are 3

为什么我们将它用作 new {controller = "Home", action = "Index", id = "" }

基本上用默认值初始化路由。您传递到方法中的值MapRoute将转换为IDictionary<string, object>供以后查找的值。

Is this is a fixed format?
Run Code Online (Sandbox Code Playgroud)

不,您可以根据您的 URL 省略或添加更多值。您在默认值中指定的值将用于查找。

例如,您可以设置路由名称搜索如下:

    routes.MapRoute(
        name: "Search",
        url: "{controller}/{action}/{searchId}",
        defaults: new {controller = "Account", action = "Login", searchId = UrlParameter.Optional}
        );
Run Code Online (Sandbox Code Playgroud)

CLR 如何解释参数的顺序?

通过将它们添加到字典中(准确地说是 RouteValueDictionary)。

A。为什么我们要在括号{}内装饰controller、action或id?

简短的回答,这是一个约定...长的回答,根据 MSDN,摘自MSDN 文章

在 URL 模式中,您可以通过将占位符括在大括号( { 和 } )中来定义它们。您可以在一段中定义多个占位符,但它们必须用文字值分隔。例如,{语言}-{国家/地区}/{操作} 是有效的路由模式。但是,{语言}{国家}/{操作} 不是有效模式,因为占位符之间没有文字值或分隔符。因此,路由无法确定在哪里将语言占位符的值与国家/地区占位符的值分开。

b. Is there any match in between URL specify and defaults?
Run Code Online (Sandbox Code Playgroud)

是的,默认值适用于 URL 中的占位符。如果添加更多默认值然后占位符,它将被忽略。如果 URL 中未包含该参数的值,则使用默认值。

如需了解更多信息,我将向您推荐这篇优秀的MSDN 文章

希望这可以帮助。