无效控制器时的StructureMap错误

我正在使用像Rob Conery那样的MVC店面的结构图,我有一个AdminController,所以我只需输入:

website/Admin/action 

但如果我拼错控制器名称,我会得到以下错误:

exception详细信息:System.ArgumentNullException:值不能为null。 参数名称:key

此行发生错误:

 Controller controller = ObjectFactory.GetInstance(controllerType) as Controller; 

有没有人对我如何处理这个错误有任何想法,或者根本不允许它发生,也许只是转到404页面?

提前干杯

问题是,如果没有具有预期类型名称的控制器(即,如果用户键入“ Amdin ”,则ControllerFactory基类将查找“ Amdin控制器”并且将找不到它,但仍将调用您的覆盖方法)。 在这种情况下,controllerType变量将为null。 所以你可以在你引用的行之前检查它为null,然后(如果它为null):

A)实施拼写修正,例如cfeduke建议

或者B)简单地抛出一个状态代码为404的HttpException(这应该会导致你正在寻找的404错误)。

注意:如果你进行拼写纠正,你应该做一个Response.Redirect到新的URL,而不是只是静默加载正确的控制器,地址栏改变,以反映拼写纠正

您有两种不同的选择(或者如果您愿意,可以将两种方法结合起来用于解决方案)。 要消除主席和地址栏之间的一些潜在问题,您可以使用新的路由框架在C#中 实现SoundEx解决方案 ,以潜在地捕获一些拼写错误并将它们重新路由到预期的URL(和/或添加您认为的路由常见的拼写错误或要求将是)。 但是,这不是一个完全解决问题的解决方案,因此您需要查看为您的应用程序实现自定义错误页面 。