我的问题在于如何从管道元素返回视图.在WebAPI示例中,它就像返回一个不必执行任何视图呈现的IhttpActionResult一样容易,但是,MVC需要以不同的方式呈现其响应,并使用Razor的附加步骤.
由于控制器公开了内部受保护的辅助方法,如VIEw()或RedirectToAction,我不能在控制器本身之外使用它们.
是否有一种优雅的方式来呈现这些?我已经看到了一些方法,每个方法都很麻烦,或者给我带来不舒服的感觉.
目前我最喜欢的方法是创建一个内部基类来隐藏受保护的方法,并将它们设置为内部,同时调用基本方法.然后将控制器实例提供给实例化的动作.这有什么不妥吗?我想不出任何可滥用的案件,但想知道是否有任何社区就此事达成共识.
解决方法 我建议你的方法更进一步.这需要一些研究,但我的基础是我为Web API 2客户端所做的一种方法.基本上我们创建了一个自定义的ControllerSelector,ActionSelector和ActionDescriptors以及一个暴露强类型业务层的控制器基类. .然后通过反射/自定义属性,我们编组了对业务层的调用,一般处理httpResponseResponse消息的转换,包括错误.
>控制器:http://pastebin.com/iK8ieBKD
> ControllerSelector:http://pastebin.com/qvEbggrP
> ActionSelector:http://pastebin.com/CEFNeKZZ
你需要做的第一件事是看:
http://www.dotnet-tricks.com/Tutorial/mvc/LYHK270114-Detailed-ASP.NET-MVC-Pipeline.html
不幸的是,ASP.NET MVC5的管道不如Web API 2灵活得多.但是你可以做三件事:
>定制控制器工厂:https://msdn.microsoft.com/en-us/library/system.web.mvc.icontrollerfactory(v=vs.118).aspx
>自定义ControllerDescriptor
>自定义ActionInvoker,解释ControllerDescriptor:https://msdn.microsoft.com/en-us/library/system.web.mvc.iactioninvoker(v=vs.118).aspx
这样,您可以让控制器执行控制器最佳 *** 作,并为控制器创建一个合约,以便使用新管道进行一般解释.这是实现这一目标的正确方法.
如您所述,高控制/控制控制器我认为这不是一个很好的计划,这是一个更强大的解决方案,但需要付出很大的努力.祝你好运!
总结以上是内存溢出为你收集整理的c# – 来自非控制器类的ActionResult全部内容,希望文章能够帮你解决c# – 来自非控制器类的ActionResult所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)