Asp.net mvc 我可以在MVC中使用这样的静态路由吗?

Asp.net mvc 我可以在MVC中使用这样的静态路由吗?,asp.net-mvc,controller,action,routes,Asp.net Mvc,Controller,Action,Routes,在我的web应用程序中,我将有一个类似以下的路径: http://server/requests/info/{id}-{guidPart} (a string) 因此,我认为我应该聪明地走一条路线,所以我做到了: routes.MapRoute( name: "Info", url: "{controller}/{action}/{id}-{guidPart}", defaults: new { controller = "Requests",

在我的web应用程序中,我将有一个类似以下的路径:

http://server/requests/info/{id}-{guidPart} (a string)
因此,我认为我应该聪明地走一条路线,所以我做到了:

routes.MapRoute(
    name: "Info",
    url: "{controller}/{action}/{id}-{guidPart}",
                defaults: new { controller = "Requests", action = "Info", id = 0, guidPart = "" }
);
然后我想,为什么我需要指定默认值,为什么不将其全部修复,除了最后一部分:

routes.MapRoute(
    name: "Info",
    url: "requests/info/{id}-{guidPart}"
);
但当我访问一个url时,如:

http://server/requests/info/123-abc123
它失败了,说:

404未找到资源。


有关于我做错了什么的提示吗?

您可以有一个静态路由,但您仍然必须指定默认路由到哪个控制器和操作

routes.MapRoute(
name: "Info",
url: "requests/info/{id}-{guidPart}",
defaults: new { controller = "Requests", action = "Info", id = 0, guidPart = ""}); 

这与上面的默认值之间的区别在于,此UriTemplate将仅尝试匹配以“requests/info/”开头的Uri

,无论哪种方式,如果没有匹配的控制器/操作,它都将返回404个字符,因此,这意味着如果我在
url
中指定固定值,性能会更好,这也是产生这种可能性的主要原因?初始模板是默认的UriTemplate,它可以灵活地处理任何控制器/操作组合。我不认为性能是这里的问题。