我想扩展控制器操作以接受可选参数。换句话说,我希望现有代码继续工作,但添加一些可以传递其他信息的新功能。我修改了我的routeprovider,controller,并测试了它。可选参数和路由都很有效。所以我做了一个回归测试,看看现有的代码仍然可以工作,你猜对了。它没有。
那么我做错了什么/不理解?我以为我可以使用现有的控制器操作,它可以使用或不使用可选参数吗?
我没有发布我的控制器代码,因为我不相信它会发挥作用。我在第一行设置断点并且从未到达那里,所以在我看来我的routeprovider有错误。如果需要其他代码,我很乐意添加它。
这适用:domain.com/signup/12345
这不过但过去工作得很好:domain.com/signup
routes.MapLocalizedRoute("SignUp", "signup/{CampaignId}",
new {controller="Customer", action="NewSignup", CampaignId=UrlParameter.Optional},
new { CampaignId = @"\d+" },
new[] { "Domain.PROJECT.Controllers" });
所以我希望上面的两个url示例能够正常工作。我当然可以在没有campaignid的情况下添加另一条路线,并将其指向同一个控制器动作但又一次......我想到......这就是让campaignid可选的背后的想法???
新的{CampaignId = @“\ d +”},对象约束是否覆盖了可选参数,并且基本上强制了campaignid存在?
谢谢
答案 0 :(得分:1)
只需定义两条路线即可。
需要活动的人:
routes.MapLocalizedRoute("SignUpCampaign", "signup/{CampaignId}",
new { controller="Customer", action="NewSignup" },
new { CampaignId = @"\d+" },
new[] { "Domain.PROJECT.Controllers" });
一个不要求它:
routes.MapLocalizedRoute("SignUp", "signup",
new { controller="Customer", action="NewSignup" },
null,
new[] { "Domain.PROJECT.Controllers" });