4

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

website/Admin/action

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

异常详细信息:System.ArgumentNullException:值不能为空。参数名称:key

此行出现错误:

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

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

提前喝彩

4

2 回答 2

6

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

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

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

注意:如果您进行拼写更正,您可能应该执行 Response.Redirect 到新 URL,而不是仅仅静默加载正确的控制器,这样地址栏会更改以反映拼写更正

于 2008-11-03T06:58:59.473 回答
1

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

于 2008-11-03T03:12:05.937 回答