AngularJS与ASP.NET MVC混淆

请注意:我在Stack Overflow中已经阅读了类似的一些问题但是没有从这些答案中得到我想要的清晰概念。

我清楚地了解为什么以及如何将AngularJS与ASP.NET Web API一起使用。 但我对使用AngularJS和ASP.NET MVC感到困惑!

在使用ASP.NET Web API的AngularJS的情况下:

Web API控制器方法返回数据,AngularJS调用Web API控制器方法并捕获数据,然后在View中呈现数据。 这非常符合逻辑!

在使用ASP.NET MVC的AngularJS的情况下:

ASP.NET MVC Controller方法本身返回带有数据的View / View。 那么AngularJS与ASP.NET MVC有什么用?

尽管如此,如果我想在ASP.NET MVC中使用AngularJS,那么我必须从ASP.NET MVC控制器方法返回JSON而不是MVC视图。

我的问题是:

  1. 为了将AngularJS与ASP.NET MVC一起使用,从ASP.NET MVC控制器方法返回JSON而不是MVC视图是否合乎逻辑? 如果我这样做,有什么好处吗?
  2. AngularJS与ASP.NET MVC的实际用途是什么? 或者我在哪里可以将AngularJS与ASP.NET MVC一起使用?

为了将AngularJS与ASP.NET MVC一起使用,从ASP.NET MVC控制器方法返回JSON而不是MVC视图是否合乎逻辑? 如果我这样做,有什么好处吗?

我会说你可以 。 但是,如果您只想返回数据,那么ASP.NET Web API就是您的最佳选择。 您的下一个问题将回答这些好处……

AngularJS与ASP.NET MVC的实际用途是什么? 或者我在哪里可以将AngularJS与ASP.NET MVC一起使用?

首先,您使用的是什么而不是MVC? 其他一些服务器端渲染? 在这个答案中我假设你有简单的html文件。 MVC仍然可以与Angular一起使用。 这里有几个场景:

1.假设您要限制对特定页面/路线的访问。 它在MVC中非常简单。

public class HomeController : Controller { [Authorize] // Authorize the user. public ActionResult Index() { return View(); } } 

如果您想使用Angular和Web API执行此操作,您将授予用户访问HTML的权限,但不能访问数据。 这有点不同。 使用MVC,您可以直接返回401

2.您可以省略显示HTML。

假设您有一些HTML应该只对某些用户可用。 如果您使用Angular隐藏/显示HTML,它仍然可供客户端使用。 但是如果您使用MVC并且根本不渲染HTML,那么用户将无法使用它。

角度:

  

MVC:

 @if(someCondition) {  } 

在客户端上隐藏某些内容并且根本不向客户端提供信息存在很大差异。

我将MVC与Angular一起使用。 我使用MVC来渲染视图。 然后我让Angular从Web API获取一些数据,然后显示特定于数据的内容。

为了将AngularJS与ASP.NET MVC一起使用,从ASP.NET MVC控制器方法返回JSON而不是MVC视图是否合乎逻辑? 如果我这样做,有什么好处?

不,ASP.NET Web API是一种更专注,更合适的技术,可以将JSON返回给浏览器。

AngularJS与ASP.NET MVC的实际用途是什么? 或者我在哪里可以将AngularJS与ASP.NET MVC一起使用?

提供动态服务器生成的主页作为SPA应用程序的入口点。

您还可以提供角度应用程序使用的动态服务器生成的模板。 您可以为已登录用户自定义页面,或向其中注入一些数据。

如果每个页面的页面相同,则无需在服务器端动态生成它,您只需使用静态html页面即可。

这里有一个主页面示例,其中当前用户名作为App.currentUser公开给angular应用程序,并根据浏览器的文化加载相应的i18n javascript文件:

 @{ Layout = null; }     Index @if (User.Identity.IsAuthenticated) {  }   

Welcome to MyApp

Loading...

从历史上看,MVC首先出现,然后引入了ASP.NET Web API。

然而,它是相同的技术 ,只是有一点点不同的语法糖,以简化您的开发略有不同的情况。

但您可以使用其中任何一个创建API。

根据您的应用程序,它并不总是单页应用程序,只有api提供的数据。 您可能有许多不同的页面,其中一部分在服务器上呈现,而部分是动态的,从api加载数据或混合和匹配。

目前.net中有三个主要分支:

  • ASP.NET Web窗体
  • ASP.NET MVC(API)
  • ASP.NET核心

选择API来为某些客户开发传统的单页应用程序或api。 如果您需要自定义API端点或更多控制构建视图/零件视图/模板或需要更多页面,请选择MVC。

注意:当我谈论单页面应用程序时,我指的是导航到起始页面一次的应用程序,所有路由和视图部分都在后台加载而无需重新加载整个页面。

在我看来,你应该使用AngularJS + ASP.NET Web API。 例如,AngularJS + ASP.NET MVC可以“帮助”您快速启动,您可以使用已开箱即用的身份validation和授权。 结合WebAPI,您应该手动实现它。 它对于小型应用程序来说已经足够了。 但是你会得到与Razor代码混合的AngularJS代码。

最好将问题分开,将AngularJS放在一个解决方案项目中,将WebAPI放在另一个项目中。 并且只能通过API进行通信。 在这种方法中,您没有诸如“返回JSON而不是视图是否合乎逻辑?”之类的问题。

PS以下是如何开始构建AngularJS + WebAPI应用程序的一个很好的示例: http ://bitoftech.net/2014/06/09/angularjs-token-authentication-using-asp-net-web-api-2-owin -asp-net-identity / 。 这是关于身份validation,但你可以得到一个想法。