Asp.net mvc ASP.NET MVC路由参数

Asp.net mvc ASP.NET MVC路由参数,asp.net-mvc,asp.net-mvc-3,asp.net-mvc-2,asp.net-mvc-routing,Asp.net Mvc,Asp.net Mvc 3,Asp.net Mvc 2,Asp.net Mvc Routing,asp.net mvc路由模式是 {"some_parameter/{controller}/{action}/{id}"} 如果某些参数可以为null或字符串为空编辑 我刚刚重新排列了路线注册顺序,以便它能够工作: routes.MapRoute( "Default", // Route name "{controller}/{action}/{id}", // URL with parameters new { controller = "home

asp.net mvc路由模式是

 {"some_parameter/{controller}/{action}/{id}"}
如果
某些参数可以为null或字符串为空

编辑

我刚刚重新排列了路线注册顺序,以便它能够工作:

routes.MapRoute(
    "Default", // Route name
    "{controller}/{action}/{id}", // URL with parameters
    new {
        controller = "home",
        action = "index",
        id = UrlParameter.Optional }
);

routes.MapRoute(
    "Default", // Route name
    "{some_parameter}/{controller}/{action}/{id}", // URL with parameters
    new {
        some_parameter = UrlParameter.Optional,
        controller = "home",
        action = "index",
        id = UrlParameter.Optional
    }
);
他们应该按这个顺序登记。此外,第二条路由需要一个id和一些_参数,否则它将永远不会被击中,因为它前面的路由。即使some_参数和id参数设置为可选,也不会发生这种情况,因为之前的路由如果是空的,就会捕获它。

Edit

我刚刚重新排列了路线注册顺序,以便它能够工作:

routes.MapRoute(
    "Default", // Route name
    "{controller}/{action}/{id}", // URL with parameters
    new {
        controller = "home",
        action = "index",
        id = UrlParameter.Optional }
);

routes.MapRoute(
    "Default", // Route name
    "{some_parameter}/{controller}/{action}/{id}", // URL with parameters
    new {
        some_parameter = UrlParameter.Optional,
        controller = "home",
        action = "index",
        id = UrlParameter.Optional
    }
);

他们应该按这个顺序登记。此外,第二条路由需要一个id和一些_参数,否则它将永远不会被击中,因为它前面的路由。即使some_参数和id参数设置为optional,这也不会发生,因为之前的路由如果是空的,就会捕获它。

我相信您想要的是
{some_参数}/{controller}/{action}/{id}
(注意“some_参数”周围的花括号),在这种情况下,它不应该是null或空的,我想。当
某个\u参数为空时,您认为您的最终URL与路由的匹配情况如何?“mysite.com//mycontroller/myaction/myid”


路由引擎只匹配模式。如果您想同时处理
{some_parameter}/{controller}/{id}
{controller}/{action}/{id}
,只需定义两个路由。

我相信您想要的是
{some_parameter}/{controller}/{action}/{id}
(注意“some_参数”周围的花括号),在这种情况下,它不应该为null或空,我想。当
某个\u参数为空时,您认为您的最终URL与路由的匹配情况如何?“mysite.com//mycontroller/myaction/myid”



路由引擎只匹配模式。如果您想同时处理
{some_parameter}/{controller}/{action}/{id}
{controller}/{action}/{id}
,只需定义两个路由。

某些_参数没有默认值。这是动态数据,例如控制器“home”,但对于某些参数,我必须设置为空。排序在这里没有帮助。您可能有两个URL,它们应该匹配不同的路由。只有约束才能解决这个问题(如果可以的话)。@VasilioRuzanni,我相信是的。正如我所解释的,他对这个解决方案的限制是第二条路线必须设置一些参数和id。一些参数没有默认值。这是动态数据,例如控制器“home”,但对于某些参数,我必须设置为空。排序在这里没有帮助。您可能有两个URL,它们应该匹配不同的路由。只有约束才能解决这个问题(如果可以的话)。@VasilioRuzanni,我相信是的。正如我所解释的,他对这个解决方案的限制是第二个路由必须设置一些参数和id。像这样创建两个路由是行不通的,因为第一个参数没有默认值。有相同的解决方案,但在你提到后删除了。我也这么想。他需要正则表达式来匹配模式,如果你能很快地完成这些任务。@Nario我真的认为如果你按照这个顺序创建路由,这将不起作用,因为你永远不会到达第二个路由(默认路由)@Craig,是的,当然,你需要约束,否则(因为我们有
id
作为可选)在许多情况下,可能会有不明确的URL,如
mysite.com/hello/crazy/world/
,它将匹配两个路由,并将采用默认情况下定义的第一个路由。即使排序在这里也没有帮助,因为您可能有两个非常相似的URL,并希望它们匹配不同的路由。@如果VasilioRuzanni的意图是在缺少某个参数的情况下匹配第一个路由,则排序也会有所帮助。通过问这个问题,我认为这是他们可能的意图,但问题中的更多信息可能会提供更好的答案。像这样创建两条路线是行不通的,因为第一个参数没有默认值。有相同的解决方案,但在你提到后删除了。我也这么想。他需要正则表达式来匹配模式,如果你能很快地完成这些任务。@Nario我真的认为如果你按照这个顺序创建路由,这将不起作用,因为你永远不会到达第二个路由(默认路由)@Craig,是的,当然,你需要约束,否则(因为我们有
id
作为可选)在许多情况下,可能会有不明确的URL,如
mysite.com/hello/crazy/world/
,它将匹配两个路由,并将采用默认情况下定义的第一个路由。即使排序在这里也没有帮助,因为您可能有两个非常相似的URL,并希望它们匹配不同的路由。@如果VasilioRuzanni的意图是在缺少某个参数的情况下匹配第一个路由,则排序也会有所帮助。根据所问的问题,我认为这是他们可能的意图,但问题中的更多信息可能会提供更好的答案。更新路线顺序,使其正确工作。如果您将此路由放在默认路由之前,它将不起作用。@Nario,您能更深入地了解您希望通过此路由实现什么吗?只是好奇。因为这是额外的复杂性,您无论如何都必须处理约束。请更新路由的顺序,使其正常工作。如果您将此路由放在默认路由之前,它将不起作用。@Nario,您能更深入地了解您希望通过此路由实现什么吗?只是好奇。因为这是额外的复杂性,您将不得不处理约束。