我已经决定我的控制器变得有点凌乱,并决定采用我在WebAPI项目中使用的管道式系统。管道由行动组成,越来越普遍,即:ViewAccountDetailsAction
> AccountAction
> AuthenticatedAction
> EmptyAction
。动作按继承顺序添加到pipleline,并为不同的场景公开成员或抽象方法。
我的问题在于如何从管道元素返回视图。在WebAPI示例中,它就像返回一个不需要执行任何视图渲染的IHttpActionResult
一样简单,但是,MVC需要以不同的方式呈现其响应,并使用Razor的附加步骤。
由于控制器公开了internal protected
或View()
等RedirectToAction
辅助方法,我无法在控制器本身之外使用这些方法。
有没有一种优雅的方式来呈现这些?我已经看到了几种方法,每种方法都很麻烦,或者给我带来不舒服的感觉。
目前我最喜欢的方法是创建一个internal
基类隐藏受保护的方法,并将它们设置为内部,同时调用基本方法。然后将控制器实例提供给实例化的动作。这有什么不妥吗?我无法想到任何可滥用的案件,但想知道是否有任何社区就此事达成共识。
答案 0 :(得分:1)
我建议您更进一步。
这需要一些研究,但我的基础是我为Web API客户端做的一种方法。基本上我们创建了一个自定义的ControllerSelector,ActionSelector和ActionDescriptors以及一个暴露强大的控制器基类。键入的业务层。然后通过反射/自定义属性,我们编组了对业务层的调用,一般处理HttpResponseResponse消息的转换,包括错误。
您需要做的第一件事就是: http://www.dotnet-tricks.com/Tutorial/mvc/LYHK270114-Detailed-ASP.NET-MVC-Pipeline.html
不幸的是,ASP.NET MVC5的管道灵活性远远低于Web API 2。但是你可以做三件事:
通过这种方式,您可以让控制器执行控制器最佳操作,并为控制器创建一个合约,以便使用新管道进行一般解释。这确实是正确的做法。
按照您的建议高举起/控制控制器我不认为这是一个很好的计划,这是一个更强大的解决方案,但需要付出很大的努力。祝你好运!