我正在使用像Rob Conery那样的MVC店面的结构图,我有一个AdminController,所以我只需输入:
website/Admin/action
但是,如果我拼错了控制器名称,我会收到以下错误:
异常详细信息:System.ArgumentNullException:值不能为null。 参数名称:key
此行发生错误:
Controller controller = ObjectFactory.GetInstance(controllerType) as Controller;
有没有人对我如何处理这个错误有任何想法,或者根本不允许它发生,也许只是转到404页面?
提前干杯
答案 0 :(得分:6)
问题是如果没有具有预期类型名称的控制器(即,如果用户键入“ Amdin ”,则ControllerFactory基类将查找“ Amdin 控制器“并且不会找到它,但仍然会调用你的覆盖方法。在这种情况下,controllerType变量将为null。所以你可以在你引用的行之前检查它为null,然后(如果它为null):
A)实施拼写纠正,例如cfeduke建议
或B)简单地抛出一个状态代码为404的HttpException(应该导致你正在寻找的404错误)。
注意:如果你进行了拼写纠正,你应该做一个Response.Redirect到新的URL,而不是只是静默加载正确的控制器,这样地址栏就会改变以反映拼写纠正
答案 1 :(得分:1)
您有几种不同的选择(或者如果您愿意,可以将两种方法结合起来用于解决方案)。要删除主席和地址栏之间的一些潜在问题,您可以implement a SoundEx solution in C#使用新的路由框架来捕获一些拼写错误并将其重新路由到预期的URL(和/或添加路由因为你认为常见的拼写错误或要求将是)。但是,这不是一个完全解决问题的解决方案,因此您需要look in to implementing custom error pages来处理您的应用程序。