我有一个带有自定义StructureMap控制器工厂的ASP.NET MVC 2应用程序来处理我的控制器的依赖注入:
public class StructureMapControllerFactory : DefaultControllerFactory { public override IController CreateController(RequestContext context,string controllerName) { Type controllerType = base.GetControllerType(context,controllerName); return ObjectFactory.GetInstance(controllerType) as IController; } }
我想知道如何在这个控制器工厂中处理异常,以便它们可以像在具有HandleError属性的控制器中一样重定向到〜/ Views / Shared / Error.aspx.尽管将CustomErrors属性设置为“On”,但目前异常不会执行此操作.
目前我可以使用像“〜/ DoesNotExist / edit / 1”这样的URL生成这样的异常.使用默认路由:
routes.MapRoute( "Default",// Route name "{controller}/{action}/{id}",// URL with parameters new { controller = "Home",action = "Index",id = UrlParameter.Optional } // Parameter defaults );
MVC匹配此路由并将控制器名称“DoesNotExist”传递给我的控制器工厂. GetControllerType然后返回null并在对StructureMap的调用中导致空引用异常.然后我希望能够处理这个异常.
请注意,添加后续捕获所有路由将无法解决此问题 – MVC匹配默认路由.
我知道我可以通过在控制器的默认路由上设置约束来解决这个特殊问题,但问题是如何在工厂中使用普通的MVC~ / Views / Shared / Error.aspx.
请注意,我不希望答案要求将控制器工厂紧密耦合到特定的MVC应用程序.理想情况下,此工厂应位于不在同一解决方案中的引用程序集中.
解决方法
也许你可以调整
this controller factory来处理异常.
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。