ASP.NET MVC和Angular 1.5体系结构和职责分离

问题描述:

我正在与我的一位同事一起开发ASP.NET MVC 5(从现在开始就是MVC)和Angular 1.5的Web应用程序。

我将使用MVC纯粹作为后端参与者:暴露API并与数据库交互,而不生成任何视图。 另一方面,角色将负责整个客户端,使用组件和模板进行视图,路由和服务以调用MVC端点。

我认为这会带来明确的职责分离和整洁的架构。然而,我的同事宁愿保留MVC路由,从服务器生成视图,并向他们注入Angular,因此使用它作为客户端业务逻辑。这会带来一些其他好处,因为可以加快某些安全措施(例如,使用@Html.AntiForgeryToken())。但是,这会使得使用角度组件和新组件模式更困难。

当然,一种不同的方法可以是仅将WebApi用作后端并保持清晰的切割,但我很好奇听到别人如何解决同样的问题。ASP.NET MVC和Angular 1.5体系结构和职责分离

Angular用于创建单页面应用程序,遵循同事的方法意味着每个路径只有一个页面应用程序,这将打破单页应用程序的用途。 SPA需要一些时间来加载,如果每条路线有一个SPA,您将为每条路线支付加载时间,并且因为它的新页面丢失了上一页的状态。

防伪标记也可用于角度应用,请参阅this

我们在我们公司创建了角度应用程序,我们使用web api和两个剃须刀页面,一个用于登录,一个用于spa应用程序。有可能只有index.html,但将登录页面分开会带来一些简单性,并将一些初始数据注入主页面可简化角引导。

+0

让MVC呈现的登录页面更实用(更接近认证服务)?否则,为什么不通过角度提供并通过API调用后端? – Francesco

+0

它也更简单。这个逻辑已经在服务器端实现了,如果你试图进入主页面,并且你没有通过身份验证,你会被重定向到登录页面,当你登录时,你会被重定向到你想要进入的主页面第一个地方。如果您想在SPA中登录,您必须在SPA中实施该逻辑。登录页面的重量非常轻,那么在SPA中实施它的好处是什么? –

+0

在Angular中实现身份验证有一些复杂性。当角度自举时,您需要知道用户是否已通过身份验证。 Angular可以在任何路由中引导,甚至当用户按F5时。如果身份验证cookie存在,用户将通过身份验证,但您无法访问身份验证cookie,因此只需要http,因此您需要调用web api终点来获取当前用户,但在角度上,不容易等待http调用bootstrapping。所以我更喜欢服务器端方法 –