2016-08-13 28 views
0

鉴于此URL的路由设置问题不能得到解决

http://localhost:51095/Person // This is equivalent to this one Person/Index 
http://localhost:51095/Person/Allan 

我设置的路由配置的它,如下所示:

routes.MapRoute(
    "Person", 
    "Person/{personName}", 
    new { controller = "Person", action = "Person", personName = UrlParameter.Optional } 
    ) 
; 

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

首先URL应遵循Default路线和第二应遵循Person路线。

这不是工作,因为第一个配置似乎捕获所有这些URL的

+1

删除'personName = UrlParameter.Optional'但是这可能会导致其他问题,如果你在'PersonController'中有任何操作方法,除了Index()和Person()',除非你为所有的其他方法 –

+0

@StephenMuecke,但我该怎么做?我应该使用'Route'注释吗?我的计划是只在特定行动中应用规则,但某些方法会受到影响。 – Sherlock

+0

这可能取决于PersonController中的其他方法。改变它说'/ People/Allan'是一种选择? –

回答

0

我做的是去除personName = UrlParameter.Optional在第一路线的第一件事。这将只允许提供personName值的网址访问此路线。如果未提供任何值,则应该转到默认路由。

但是你会想用这个策略来思考未来:如果你在那个Person控制器上实现新的行为,你需要为它们中的每一个添加一个新的Route。如果你有,例如一个新的“编辑”行为:

routes.MapRoute(
"Person_Edit", 
"Person/Edit/{personName}", 
new { controller = "Person", action = "Edit" } 
) 

你会想,虽然前添加这些新路由第一个 - 路线的顺序/优先级是很重要的。

+0

有想法,我打算在我的操作中添加MVC 5路由 – Sherlock