【发布时间】:2013-12-07 14:41:16
【问题描述】:
我想扩展一个控制器动作来接受一个可选参数。换句话说,我希望现有代码继续工作,但添加一些可以传递额外信息的新功能。我修改了我的路由提供程序、控制器并对其进行了测试。可选参数和路由都很好用。所以我做了一个回归测试,看看现有的代码仍然可以工作,你猜对了。没有。
那么我做错了什么/不理解?我认为我可以使用现有的控制器操作,它可以在有或没有可选参数的情况下工作吗?
我没有发布我的控制器代码,因为我不相信它会起作用。我在第一行设置了断点,但从未到达那里,所以在我看来,我的 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 示例能够正常工作。我当然可以添加另一条不带活动 ID 的路由并将其指向相同的控制器操作,但再次......我认为......这就是使活动 ID 可选的想法???
新的 { CampaignId = @"\d+" }, 对象约束是否会覆盖可选参数并基本上强制campaignid 存在?
谢谢
【问题讨论】:
-
new { CampaignId = @"\d*" }应该这样做。 -
@shakib 这并没有破坏任何东西,但它不允许路由在有/没有参数的情况下运行。
-
可能我理解错了,但是使用默认路由处理程序即
MvcRouteHandler,使用约束new { CampaignId = @"\d*" }支持site.com/signup和site.com/signup/和site.com/signup/123
标签: asp.net-mvc asp.net-mvc-3 asp.net-mvc-routing