Asp.net mvc 2 未调用ModelBinder

Asp.net mvc 2 未调用ModelBinder,asp.net-mvc-2,autofac,modelbinders,Asp.net Mvc 2,Autofac,Modelbinders,根据,我实现了一个模型绑定器,它将/api/v1/widgets/1,2,3映射到 // WidgetsController.cs: public ActionResult Show(IEnumerable<int> idArgs) { } 路线如下所示(我已验证此路线正在使用): Edit:我尝试了更多地搞乱路由,以及注释掉JsonValueProvider,但仍然得到了一个空数组。在我的控制器中,我可以 var ids = RouteData.Values["idArgs

根据,我实现了一个模型绑定器,它将
/api/v1/widgets/1,2,3
映射到

// WidgetsController.cs: 
public ActionResult Show(IEnumerable<int> idArgs)
{

}
路线如下所示(我已验证此路线正在使用):


Edit:我尝试了更多地搞乱路由,以及注释掉
JsonValueProvider
,但仍然得到了一个空数组。在我的控制器中,我可以

var ids = RouteData.Values["idArgs"];
然后得到字符串“1,2,3”。如果只有框架将其传递给我的ModelBinder,我的ModelBinder会将其转换为
IEnumerable

我用的是自动传真机。是否可能AutoFac正在将空数组注入我的控制器方法?我在其他地方没有遇到过类似的问题(在这个项目中,我们在任何地方都使用AutoFac)



Edit2:我还尝试用
[ModelBinder(typeof(IEnumerableofticsvmodelbinder))]
装饰
idArgs
操作参数和控制器,但没有效果。

我看到在
应用程序启动时添加了
JsonValueProviderFactory
。也许在这个工厂的实现中有什么东西可以防止模型绑定器被击中


另外,您显示的url与您的路由定义没有任何关系,您可以尝试将您的路由移动到第一个注册的路由吗?我只是试着对它进行编码,但遇到了一个问题,我的路线在我将它的注册移到默认路线注册之上之前没有启动。路由似乎是按照它们注册的顺序运行的,因此,如果您在注册之后进行了更具体的注册,并且进行了更一般的注册,则可能不会触发路由

在本例中,第二条路由从未被调用:

routes.MapRoute(
    "Default",
    "{controller}/{action}/{id}",
    new { controller = "Home", action = "Index", id = UrlParameter.Optional });

routes.MapRoute(
    "Ids",
    "{controller}/{action}/{ids}",
    new { controller = "Home", action = "Index", ids = UrlParameter.Optional },
    new { ids = @"^(\d+,)+\d+,?$" });

但是如果你颠倒顺序,就会调用“id”。

如果你将操作改回ShowMany,这会使它再次工作吗?我只是反复检查了一下,结果没有。我没有具体的答案,但是如果它以前工作过,但现在不行,并且你有效地使用了源代码管理,也许你可以找出代码从工作到不工作的提交位置。嗨,你有没有可能“平分”你的源代码管理历史,找到这个中断的提交位置?考虑到变量的数量,这可能是最快的答案。是的,这主意不错。不幸的是,这个项目需要完成的工作比使用合适的模型绑定器要多,所以我可能只解析控制器中的字符串。是的,JsonValueProvider看起来确实是一个可能的候选对象。。。上周也有,但这个请求可能有些不同。路由不匹配只是上一个示例中复制粘贴的产物,它们实际上是匹配的。。。不知道这里发生了什么,我想我不得不放弃了。@notJim,如果你有可能把你的项目寄给我,我可以看看有什么问题(虽然没有承诺时间)。你太慷慨了,但恐怕我不能这么做。
var ids = RouteData.Values["idArgs"];
routes.MapRoute(
    "Default",
    "{controller}/{action}/{id}",
    new { controller = "Home", action = "Index", id = UrlParameter.Optional });

routes.MapRoute(
    "Ids",
    "{controller}/{action}/{ids}",
    new { controller = "Home", action = "Index", ids = UrlParameter.Optional },
    new { ids = @"^(\d+,)+\d+,?$" });