ASP.NET MVC路由Maproute参数

时间:2014-08-20 05:26:31

标签: 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);
    }
}

使用以下签名进行映射

public static Route MapRoute(
    this RouteCollection routes,
    string name,
    string url,
    Object defaults
)

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

  1. 为什么我们将其用作new { controller = "Home", action = "Index", id = "" }
  2. 这是固定格式吗?
  3. 如何CLR interpret sequence参数?
  4. 跟进问题:

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

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

2 个答案:

答案 0 :(得分:3)

  

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

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

Is this is a fixed format?

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

例如,您可以设置路径名称Search,如下所示:

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

CLR如何对参数进行interprt排序?

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

  

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

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

  

在URL模式中,您可以通过将它们括在大括号中来定义占位符   ({和})。您可以在段中定义多个占位符,   但它们必须用字面值分隔。例如,   {language} - {country} / {action}是一种有效的路由模式。然而,   {language} {country} / {action}不是有效模式,因为有   占位符之间没有文字值或分隔符。因此,   路由无法确定在何处分离语言的值   占位符来自国家占位符的值。

b. Is there any match in between URL specify and defaults?

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

有关详细信息,我将向您指出这个优秀的MSDN Article

希望这有帮助。

答案 1 :(得分:0)

routes.MapRoute(
    name: "Search",
    url: "{controller}/{action}/{searchId}",
    defaults: new {controller = "Account", action = "Login", searchId = UrlParameter.Optional},
    new {id = @"\d{1, 2}" }
);

new表达式不适用于MVC 5约束吗?