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

website/Admin/action

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

异常详细信息: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,而不是只是静默加载正确的控制器,这样地址栏就会改变以反映拼写纠正

其他提示

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

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top