ASP.NET MVC和Angularjs一起+ ASP.NET Web API

我想知道使用这两个世界的优点和缺点:

  • ASP.NET MVC和Angularjs在一起(没有剃刀,Angularjs将完成这项工作)。
  • AngularJS(前端)+ ASP.NET Web API(后端)。

我们专注于SPA / Mini-SPA,适用于具有大量服务器端业务规则和计算的中型/大型企业项目。 我也专注于安全性。

优点和缺点意见将帮助我在脑海中找到这个问题的依据:

将ASP.NET Web API(后端),ASP.NET MVC和Angularjs一起使用是一个明智的决定吗?

是的,将两者结合起来是明智的。 显然,根据具体项目,您需要调整最终解决方案中的一些变量。

您建议的实际上是我们最近2或3个项目的堆栈,根据具体要求在这里和那里有一些变体。 我们使用过WebAPI + DurandalJS,WebAPI + Knockout …一切都很好:) AngularJS似乎已经停留在最长的时间,在我们公司内部和社区的其他部分(这是一个决定)越来越受欢迎我的因素)

当前的技术堆栈。

+------------------------------------+ | Usage | +-------------------------+------------------------------------+ | AngularJS | The client app web, or mobile | +-------------------------+------------------------------------+ | WebAPI | For all your data access needs | +-------------------------+------------------------------------+ | OAuth & Bearer Tokens | For Authentication & Authorization | +-------------------------+------------------------------------+ | SQL Server & EF / any | Persistence | | any other noSQL variant | & Storage | +-------------------------+------------------------------------+ | Angular-UI / | | | Angular-Material | Base UI components | +-------------------------+------------------------------------+ | Katana | Collection of projects for | | | supporting OWIN on MS-Stack | +-------------------------+------------------------------------+ | CORS | Standard for implementing | | | cross domain requests | +-------------------------+------------------------------------+ 

优点:

  • Web App可以很容易地移植到移动设备上(如果以你知道你可能会移动的方式编写)

    • 使用Cordova
  • 如果您选择使用其他服务/应用程序,您可以轻松访问API …而且API很酷(与传统访问机制相比)

  • AngularJS允许强大但结构化的客户端代码(不是没有Angular你不能这样做,但根据我的经验,如果你正确地遵守它们,框架会执行更好的实践)

  • 开始听起来像一个破纪录,但众所周知,AngularJS是超级可测试的

  • 如果您害怕NodeJS以及像grunt / gulp这样的东西,你可以使用.Net捆绑

    • 不是你必须害怕它(但熟悉>不熟悉)
    • 只需确保客户端代码以Minsafe方式编写
  • Visual Studio实际上非常酷,特别是他们最近专注于开源支持。 AngularJS , Node的大量集成点(你可能会在某些时候使用它),显然ASP.Net MVC

缺点:

  • 如果您不熟悉Angular,那么学习曲线就会很好

  • 可能重复validation

    • 为了减少往返/回调,显然最好先发送正确的数据。 因此,在一些(或大多数)实例中,我们需要在JavaScript中复制一些数据级validation
  • 虽然它可能不适用,并且有点长镜头…我一直在客户端,他们严格要使用所有MS,因为opensource“不太安全”,因为人们可以访问框架代码。 .. 去搞清楚。 因此,请确保他们愿意使用开源的SPA框架(这可能适用于任何其他框架或工具)(以及随之而来的一切)

  • 安全性重复。 您需要确保保护API和应用程序。 (因为两层之间存在脱节)

  • 您需要了解CORS的工作原理以及如何正确地理解它,因为您的API和Web应用可能不在同一个域/来源上

也。 值得一读:

  1. 宁静建筑的利弊

  2. Restful WebAPI与常规控制器(我在设计/理解WebAPI和REST设计时提出的上一个问题)

一种可能的解决方案是使用Web API创建REST服务并使用基于Angular的前端应用程序(实际上,您选择哪种前端技术 – 网络,桌面,本机移动等等)并不重要)。 如果一切都使用REST API完成,包括授权和身份validation(承载令牌是一个很好的选择),这是可能的。

在这种情况下,您的Web服务器将只是充当Angular视图的主机。 无论你是否将纯HTML与ng-属性,MVC甚至老式WebForms一起使用都没关系,因为在服务器上不会动态生成标记 – Angular将在客户端执行所有必需的DOM操作。

这取决于您的架构。 我非常喜欢为任何ASP.Net MVC应用程序公开API(安全,以度量为中心)。 在一个更大的多角色应用程序中,我根据function角色分离了一系列AngularJS SPA的访问控制部分。 使用Razor使用单个视图(索引)创建控制器。 该视图集成了包装Bootstrap主题,然后包含一个AngularJS引用以引入相应的应用程序。 后端控制器(View和API)使用Identity Framework进行保护。 AngularJS被用于为网站的每个function部分提供优雅的UI。 就我而言,这种方法允许在每个部分的基础上更好地隔离可测试代码。 在同一域中托管API和UI还可以避免跨域托管可能引起的任何CORS注意事项。

以下是结构草图:

 /Content /AccessGroup1/app.js (service, controllers) /AccessGroup2/app.js (service, controllers) /Controllers /AccessGroup1controller /AccessGroup2Controller /Views /AccessGroup1 /index.cshtml /AccessGroup2 /index.cshtml 

我认为这不是关于Angular的ASP.NET MVC。 它应该是Angular或没有Angular.js。 将Angular.js与ASP.NET Web API一起使用会更有意义,因为Angularjs可以有效地处理UI部分。

以下是Angualr.js的一些优点和缺点

好处:

  • 在JavaScript中创建UI的简洁方法
  • Angular.js是可测试的。 你可以针对它编写测试。
  • Angular js提供可重用的组件
  • 使用angularjs开发人员可以提高工作效率。

缺点:

  • 不安全。 由于大多数代码相关的UI将仅在Javascript中
  • 不是SEO友好,因为大多数的JavaScript代码只在JavaScript中

所以它依赖于应用的本质。 您需要创建更安全的应用程序,或者您需要创建像SEO更重要的电子商务网站之类的应用程序。 然后你应该使用普通的ASP.NET MVC。 但如果那不是选项那么值得使用angular.js。

您还可以使用混合类型的应用程序,如果您需要安全页面或SEO相关,那么您可以使用ASP.NET MVC,而对于其他用户配置文件,您可以使用angular.js

因此,您需要根据自己的要求进行权衡。 两者都有利有弊。