我正在使用ASP.NET MVC6构建一个Web应用程序,需要通过Web浏览器(通过视图)以及通过Web API从移动应用程序访问。问题是我想避免在控制器中复制业务逻辑。
我知道MVC6控制器返回IActionResult。当用作MVC控制器时,IActionResult可能是一个视图。当用作Web API控制器时,IActionResult可能是数据(例如产品列表)。同一个控制器可能具有返回视图和数据的操作(两个不同的操作)。
但我的要求是有一个单一的方法,当以网站形式正常方式调用时可用于呈现视图,并在调用Web API方法时返回数据。
答案 0 :(得分:0)
正如您已经知道的那样,MVC控制器和Web API控制器现在完全相同。它们已经在MVC 6.0中统一了。
当你说你想避免在控制器中出现重复的业务逻辑时,我想问一下为什么它首先是这样的?
您是否有/您不应该使用某种类库项目作为您的业务层,您可以在其中存储所有相关的业务规则?
例如:
此外,您希望能够在经典浏览器中和移动设备一起查看应用程序。你有没有考虑建立一个SPA (Single Page Application)
,让你在这两个方面都做得最好?
SPA
方法允许您创建视图并使用客户端框架(例如:Angular)将允许您调用WebAPI,而WebAPI又会调用您的Contoso.Service
图层。
当然,除非您的移动应用是本机的,只需要调用您的WebAPI
如果IActionResult
有一种方法可以返回View
或某些Data
,那么我担心的是IActionResult
可能会开始增长并拥有一些Views
其中可发现的逻辑,从长远来看可能难以维护/调试。
当您修改其行为时,也会增加回归的可能性,因为您需要同时测试mobile app
和hostname =~ /^(([a-zA-Z0-9]|[a-zA-Z0-9][a-zA-Z0-9\-]*[a-zA-Z0-9])\.)*([A-Za-z0-9]|[A-Za-z0-9][A-Za-z0-9\-]*[A-Za-z0-9])$/
。
我对你的项目知之甚少,我会看一下SPA方法,看它是否符合你的需要。