Dan*_*ark 5 c# asp.net-mvc razor asp.net-mvc-4 asp.net-mvc-5
我已经确定我的控制器有些混乱,并决定采用一个WebAPI项目中使用的管道样式的系统。该管道由行动,即得到越来越普遍,即:ViewAccountDetailsAction> AccountAction> AuthenticatedAction> EmptyAction。这些动作都按继承顺序添加到子管道,并公开成员或针对不同场景的抽象方法。
我的问题在于如何从管道元素返回视图。在WebAPI示例中,返回一个IHttpActionResult不需要执行任何视图呈现的操作非常简单,但是,需要MVC通过Razor的附加步骤以不同的方式呈现其响应。
由于Controller公开了internal protected诸如View()或的辅助方法RedirectToAction,因此我无法在控制器本身之外使用这些方法。
是否有一种优雅的方法来渲染这些内容?我已经看到了几种解决方法,每种方法要么麻烦,要么给我不舒服的感觉。
目前,我最喜欢的方法是使internal基类隐藏受保护的方法,并使它们成为内部对象,同时调用基方法。然后将控制器实例提供给实例化操作。这有什么过分的错误吗?我想不出任何可虐待的案件,但想看看是否有任何社区对此事达成共识。
我建议您更进一步采取您的方法。
这需要一些研究,但我基于我为使用 Web API 2 的客户端所做的方法。基本上,我们的想法是创建一个自定义的 ControllerSelector、ActionSelector 和 ActionDescriptors 以及一个公开强类型业务层的控制器基类。然后,通过反射/自定义属性,我们将调用编组到业务层,一般处理对 HttpResponseResponse 消息的转换,包括错误。
您需要做的第一件事是查看: http://www.dotnet-tricks.com/Tutorial/mvc/LYHK270114-Detailed-ASP.NET-MVC-Pipeline.html
不幸的是,ASP.NET MVC5 的管道不如 Web API 2 灵活得多。但是你可以做三件事:
这样,您就可以让控制器去做控制器最擅长的事情,并为控制器创建一个合约,以便使用新的管道进行一般解释。这确实是正确的做法。
正如您所建议的那样,对控制器进行高位劫持/破坏,我认为这不是一个很好的计划,这是一个更强大的解决方案,但需要付出巨大的努力。祝你好运!
| 归档时间: |
|
| 查看次数: |
535 次 |
| 最近记录: |