混合Angular和ASP.NET MVC/Web API?

use*_*870 86 asp.net-mvc asp.net-mvc-4 angularjs

我来自使用ASP.NET MVC/Web API,现在我开始使用Angular,但我不清楚混合它们的正确方法.

一旦我使用Angular,MVC服务器端概念仍然提供任何价值吗?或者我应该严格使用Web API来获取角度HTTP调用的数据?

对于转换为Angular的ASP.NET MVC人员的任何提示都会有所帮助

nul*_*ull 112

纯Web API

我曾经是ASP.NET MVC的硬核,但是因为我遇到了Angular,所以我没有看到为什么我会使用任何服务器端内容生成框架的原因.Pure Angular/REST(WebApi)提供更丰富,更流畅的结果.它更快,并允许您构建非常接近桌面应用程序的网站,没有任何时髦的黑客攻击.

Angular确实有一点学习曲线,但是一旦你的团队掌握了它,你就可以在更短的时间内建立更好的网站.这主要与你没有所有这些状态(较少)问题的事实有关.

例如,想象一下带有任何传统服务器端框架的向导表单.每个页面都需要单独验证和提交.也许页面的内容取决于前一页的值.也许用户按下后退按钮并重新提交以前的表格.我们在哪里存储客户的状态?使用Angular和REST时,所有这些并发症都不存在.

所以...走到黑暗的一边......我们有饼干.

类似的问题

  • @Sleeper Smith:我和团队中的人多次讨论过这个问题,但最终__code convention__,__ unit testing__和__separation of concern__提供了比世界上所有_type safety_更多的东西.我也很想看到_JS_被像_C#_这样的东西所取代,但实际情况并非如此.重要的是你可以达到的结果.您的客户可能不关心您的编码偏好,他们想要一个看起来很酷,表现流畅的网站,他们想要快速._Angular_完成了这项工作. (5认同)
  • 因为当我在特定模型上重命名属性时,我不必在AngularJS周围挖掘"魔术字符串"?Angular很不错,但在.net的严格类型安全世界中,更紧密的集成允许您从服务器端利用类型安全性. (3认同)
  • @Narayana; [This](http://www.yearofmoo.com/2012/11/angularjs-and-seo.html)提供了一些SEO爱. (2认同)

Hac*_*ese 43

AngularJS与单页面应用程序范例更相关,因此,从呈现标记的服务器端技术中获益不大.没有技术上的理由阻止你一起使用它们,但从实际意义上讲,你为什么这么做?

SPA检索所需的资产(JS,CSS和HTML视图)并自行运行,与服务进行通信以发送或检索数据.因此,服务器端技术仍然需要提供这些服务(以及其他方式,如身份验证等),但渲染部分在很大程度上是不相关的,并不是特别有用,因为它是重复的工作,除了MVC做它在服务器端,Angular在客户端上执行此操作.如果您使用的是Angular,则需要在客户端上获得最佳效果.您可以制作Angular post HTML表单并从MVC操作中检索部分视图,但是您将错过Angular的最佳和最简单的功能并使您的生活更加艰难.

MVC非常灵活,您可以使用它来为SPA应用程序提供服务.但是,WebAPI更精细,更容易用于此类服务.

我编写了许多AngularJS应用程序,包括一些从已有的WebForms和MVC应用程序迁移的应用程序,并且ASP.NET方面发展为一个平台,用于将AngularJS应用程序作为实际客户端提供,以及用于托管应用程序层客户端通过REST(使用WebAPI)进行通信.MVC是一个很好的框架,但它通常会在这些类型的应用程序中找不到工作.

ASP.NET应用程序成为基础架构的另一层,其职责仅限于:

  • 托管依赖容器.
  • 将业务逻辑实现连接到容器中.
  • 为JS和CSS设置资产包.
  • 主机WebAPI服务.
  • 实施安全性,执行日志记录和诊断.
  • 与应用程序缓存连接以提高性能.

SPA的另一个好处是它可以增加团队的带宽.一组可以爆发服务,而另一组则在客户端应用程序中.由于您可以轻松地存根或模拟REST服务,因此您可以在模拟服务上拥有一个完全正常工作的客户端应用程序,并在完成后替换为真实服务器.

你必须在Angular上预先投资,但它会带来很大回报.由于您已熟悉MVC,因此您可以了解一些核心概念.


Bra*_*lio 6

这取决于您正在进行的项目.

如果angularJS对你来说是新的,我宁愿选择一个小的低风险/压力项目来开始并确保你学会如何以正确的方式做事(我已经看到很多项目使用Angularjs因为压力,截止日期错误...没有时间以适当的方式学习它,例如使用JQuery或访问控制器内的DOM等...).

如果项目是一个绿色领域,并且你有一些AngularJS的经验,放弃ASP.net MVC是有道理的,而在服务器端则是纯粹的REST/WebAPI.

如果它是一个现有的项目,你可以选择一个复杂的功能子集,并将该页面构建为一个单独的angularJS应用程序(例如,你的应用程序由一大堆标准的简单/中等复杂性基于Razor的页面组成,但你需要和高级编辑器/页面,可能是使用AngularJS构建的目标部分).