无效控制器时的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(和/或添加您认为的路由常见的拼写错误或要求将是)。 但是,这不是一个完全解决问题的解决方案,因此您需要查看为您的应用程序实现自定义错误页面 。
- DataAnnotations的FileExtensions属性在MVC中不起作用
- 潜在的并发问题?
- ASP.Net Identity 2.0 AccessFailedCount不递增
- 在ASP.NET中使用dependency injection和工厂模式传递服务
- Viewbag RuntimeBinderException:’object’不包含定义
- 如何使用EF6更新多对多表
- 如何在ASP.Net MVC应用程序中使用来自WCF身份validation服务的身份validationcookie
- ASP.NET MVC + WF + WCF + SERVICE LAYER如何在一个项目中使用它们?
- lambda表达式使用select和where子句连接多个表