c# – 来自非控制器类的ActionResult
我已经决定我的控制器变得有点凌乱,并决定采用我在WebAPI项目中使用的管道式系统.管道由动作组成,这些动作越来越普遍,即:ViewAccountDetailsAction> AccountAction> AuthenticatedAction> EmptyAction. Actions按继承顺序添加到pipleline,并为不同的场景公开成员或抽象方法.
我的问题在于如何从管道元素返回视图.在WebAPI示例中,它就像返回一个不必执行任何视图呈现的IHttpActionResult一样容易,但是,MVC需要以不同的方式呈现其响应,并使用Razor的附加步骤. 由于控制器公开了内部受保护的辅助方法,如View()或RedirectToAction,我不能在控制器本身之外使用它们. 是否有一种优雅的方式来呈现这些?我已经看到了一些方法,每个方法都很麻烦,或者给我带来不舒服的感觉. 目前我最喜欢的方法是创建一个内部基类来隐藏受保护的方法,并将它们设置为内部,同时调用基本方法.然后将控制器实例提供给实例化的动作.这有什么不妥吗?我想不出任何可滥用的案件,但想知道是否有任何社区就此事达成共识. 解决方法
我建议你的方法更进一步.
这需要一些研究,但我的基础是我为Web API 2客户端所做的一种方法.基本上我们创建了一个自定义的ControllerSelector,ActionSelector和ActionDescriptors以及一个暴露强类型业务层的控制器基类. .然后通过反射/自定义属性,我们编组了对业务层的调用,一般处理HttpResponseResponse消息的转换,包括错误. >控制器:http://pastebin.com/iK8ieBKD 你需要做的第一件事是看: 不幸的是,ASP.NET MVC5的管道不如Web API 2灵活得多.但是你可以做三件事: >定制控制器工厂:https://msdn.microsoft.com/en-us/library/system.web.mvc.icontrollerfactory(v=vs.118).aspx 这样,您可以让控制器执行控制器最佳操作,并为控制器创建一个合约,以便使用新管道进行一般解释.这是实现这一目标的正确方法. 如您所述,高控制/控制控制器我认为这不是一个很好的计划,这是一个更强大的解决方案,但需要付出很大的努力.祝你好运! (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |