我正在尝试使用AngularJS创建我的第一个Web应用程序。我习惯使用ASP.NET MVC 4,所以我想我会在服务器端使用它,而在客户端使用Angular。但在观看视频和进行研究后,似乎将这两者混合起来是错误的。其中一个原因是路由:Angular以自己的方式路由,就像ASP.NET MVC一样。
那么,对于熟悉ASP.NET MVC的人来说,前端的Angular可以使用哪种服务器端Web技术?我正在Visual Studio 2013中创建一个新项目,这些是我的选择:
注意:我不是在争论为什么一个选择比另一个更好;我只是希望听到可用的可能性。我可以从那里调查。
注意2:我也可以使用Angular seed template,但我可能会这样做,但这并不能解决服务器端使用的问题。
修改 在这种情况下使用ASP.NET Web API可能有意义吗?请参阅https://stackoverflow.com/a/21098169/279516。
答案 0 :(得分:7)
对我而言,您似乎正在尝试制作单页应用程序。我理解你对路由的困惑,所以我将解释我们是如何做到的。
我们有一个ASP.NET MVC5项目,它也托管ASP.NET Web API 2.我们所有的MVC5路由都是通过一个控制器中的单个动作来处理的:
routes.MapRoute("CatchAll", "{*url}",
new { controller = "Home", action = "Index" }
);
此操作返回一个视图,此视图是我们使AngularJS应用程序工作所需的基本HTML。这个HTML包含所需的CSS和JavaScript文件(框架和应用程序逻辑,如控制器,指令,服务等),并在正文中包含一些基本的HTML,如页眉,页脚和ng-view元素,其中每个路径的视图你映射的地图。
现在,使用ASP.NET Web API,我们实现了AngularJS应用程序使用的REST Web服务。这些Web服务返回了AngularJS很好理解的JSON对象,您将在JavaScript应用程序中使用它们而不会产生任何摩擦。
总而言之,您将在浏览器中点击的任何链接,如/ Home / Index,/ Home / Friends,/ Account / Settings等,服务器将始终返回相同的HTML,AngularJS将读取URL并执行您在应用程序中配置的相应控制器和相应视图。
要详细了解单页应用程序:http://en.wikipedia.org/wiki/Single-page_application
使用AngularJS了解有关单页应用程序的更多信息:http://scotch.io/tutorials/javascript/single-page-apps-with-angularjs-routing-and-templating 2
阅读有关REST服务的更多信息:http://www.vinaysahni.com/best-practices-for-a-pragmatic-restful-api
这不是故事的结尾。我说你遇到的任何路由,服务器将始终返回相同的HTML。那么为什么要使用ASP.NET MVC5呢?这个基本的HTML可以是一个静态文件,对吗?
嗯,这个概念在搜索引擎优化方面不起作用。搜索引擎机器人没有执行JavaScript,所以他们希望他们所需要的只是你的路线(链接)上的那一次点击。此外,Facebook不执行JavaScript,但也期望HTML特定于用户试图共享的页面。
因此,我们所做的是在服务器端创建了与在AngularJS上映射的路由相同的路由,并为每个操作添加了一个过滤器。此过滤器检查是否从浏览器发出请求,它为每个操作返回相同的HTML。如果是来自Google或Bing bot或Facebook刮刀的请求,则过滤器允许执行操作,并且操作会返回该路线的相应HTML。这个HTML非常基础,结构非常好,可供Google,Bind和Facebook理解,不包含任何CSS或JavaScript。
答案 1 :(得分:2)
这样做并没有错。开箱即用,Web API可以提供Angular JS使用的JSON数据。
vanilla ASP.NET MVC项目为您提供基本Web应用程序和身份验证。然后可以调整单个视图以利用Angular提供的单页功能。
.NET路由可以像任何其他MVC站点一样使用,其中一些路由服务于SPA页面的基础,允许您在整个Web应用程序中开发多个较小的SPA。然后,您可以使用Angular的路由在迷你SPA的不同视图之间切换。
答案 2 :(得分:1)
Angular.js是一个客户端框架,可以与任何后端系统一起使用,因为它与平台无关。您可以编写简单的html + WebApi或将角度代码写入任何Web窗体或MVC视图,并使用json成功使用后端服务器(例如,但实际上可以是任何),因此您可以选择您更喜欢/更了解的内容。
顺便说一句,关于路线或任何其他东西,它只是解决问题的一个来源,但只有当视频中的人说这是一个很酷的功能时,你不需要使用它。只需使用可以帮助您解决问题的内容,并将其余内容留给其他时间。