用angular 2 app替换现有的MVC项目

这听起来有点奇怪,但我会解释我想做什么。

我目前有一个用C#编写的MVC网站正在使用Razor Views。 在同一个项目中,我添加了一个API,我可以这样访问:www.mysite.com/api/controller/get。

只需访问www.mysite.com/controllername/index即可访问普通页面。

现在的问题是我用angular 2重新创建了网站,现在我需要在线发布网站,我的意思是完全取代mvc项目。

我的解决方案1是将角度应用程序和api分开:所以,我在www.mysite.com上发布了有角度的网站,并在api.mysite.com上发布了api。

解决方案2?:我想知道是否可以通过angular 2应用程序简单地替换当前项目的MVC部分? 所以一切都停留在同一个域上。 (又名同一个项目)

编辑:如果解决方案2是可能的:如何在没有与mvc项目冲突的路由的情况下在项目中包含angular 2应用程序。 换句话说,我想删除MVC路由。

所以我最终选择了解决方案#2。

事实certificate比我想象的要容易。

这就是我做的:

  1. 在项目中创建一个文件夹,例如:“app”
  2. 运行ng-build并将构建文件放在此文件夹中。
  3. 创建一个控制器,它将充当应用程序的包装器。 我是AppController
  4. 在控制器中添加此代码:

    public ActionResult Index() { return new FilePathResult("~/app/index.html", "text/html"); } 
  5. 我们现在需要处理路线。 进入RoutesConfig.cs并确保在RegisterRoutes中有此function

      routes.MapRoute( name: "Default", url: "{controller}/{action}/{id}", defaults: new { controller = "App", action = "Index", id = UrlParameter.Optional } ); 
  6. 现在你需要通过将“base href”更改为: base href="/app/"来编辑angular的index.html(这是因为angular项目的根位于你之前创建的文件夹应用程序中。)

  7. 现在这里是棘手的部分,如果你运行它,它会工作,但你会很快注意到你不能复制和粘贴你的url没有错误。 但是,我们很幸运有UrlRewrite!

如果您还没有,请转到您的app文件夹并创建一个Web.config。

  1. 以下是位于app文件夹内的Web.config文件内的内容。

                          

这甚至会忽略模式site.com/api,因此您的api调用仍然有效! 此外,这里的魔术是行动类型=“重写”url =“/ app /”,这将解决无法复制粘贴链接的问题。 最后,如果您有mvc控制器并且您尝试访问它们,它仍然可以工作。

瞧。

是的,您可以使用利用Web API调用的Angular站点替换ASP.NET MVC代码。 正如你所怀疑的那样; ASP.NET MVC路由优先于任何角度路由。

要做的主要是确保您设置静态文件服务,以便您的Web服务器将相应的javascript和html文件发送到服务器。 这应该至少让你的角度应用程序自举。

另一个重要的事情是在角度中使用“#”样式的路由。 MVC不使用这些路由,因此它们总是传递给角度。 它可以配置路由器将“正常”路由传递给角度,但这种方法往往更容易。