加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > asp.Net > 正文

asp.net-mvc – 如何在ASP.NET MVC控制器工厂中处理异常

发布时间:2020-12-16 03:47:09 所属栏目:asp.Net 来源:网络整理
导读:我有一个带有自定义StructureMap控制器工厂的ASP.NET MVC 2应用程序来处理我的控制器的依赖注入: public class StructureMapControllerFactory : DefaultControllerFactory{ public override IController CreateController(RequestContext context,string c
我有一个带有自定义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来处理异常.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读