在同一解决方案中共享ASP.NET和ASP.NET Core项目之间的路由和控制器

时间:2018-03-07 18:45:06

标签: c# asp.net angular asp.net-core

问题:如何使用.NET Core应用程序配置解决方案,以便在同一解决方案中使用由ASP.NET应用程序处理的相同控制器,路由和身份验证?

后台:我的项目是使用VS中包含的ASP.NET单页应用程序模板构建的单页面应用程序。该模板使用knockout创建一个项目作为SPA库。我将大大扩展应用程序的代码库,我们将把它转移到Angular项目。

我想使用正确利用Angular CLI的新Angular模板,以及使用更轻量级的.NET Core。问题是我不知道如何在同一解决方案中利用.NET Core项目中原始ASP.NET应用程序中当前维护的所有后端代码库。

我可以通过创建ClientApp目录并在该目录中构建新的Angular CLI应用程序,在原始ASP.NET应用程序中开发Angular应用程序。我使用ng build --watch命令开发,该命令在每次保存时将静态文件输出到ClientDist目录。然后,我可以通过向我的web.confg添加一些调整并在关联的控制器中调用以下内容来从任何给定路径提供渲染的静态资源:

public ActionResult Index()
    {
        return new FilePathResult("/ClientDist/index.html", "text/html");
    }

这种方法的主要缺点是:

  1. 我认为它混淆了代码库的问题。 Angular CLI应用程序是一项非常大的工作,应该尽可能地与后端代码库的其余部分分开。
  2. (真正的缺点)我无法弄清楚如何在浏览器中调试我的Typescript文件。通常,在开发Angular CLI应用程序时,可以在已编译的代码中设置断点,然后映射到原始的Typescript文件。使用这个模型我只有编译的代码。它现在可行,因为它是一个小应用程序,但它会妨碍我们后者。

1 个答案:

答案 0 :(得分:1)

我正在开发一个大型项目,其中包含一些遗留代码(ASP.NET MVC),一些SPA(在我的情况下为React),一些较新的Web API后端(ASP.NET Core),以及我的方式在我的旅程中进化:

  1. 完全在.NET解决方案之外开发SPA。这使您可以使用更多的Typescript + Javascript savvy IDE(在我的案例中为VS Code),使用框架提供的工具(Angular,React等)调试它们,并利用内置的更高级的客户端调试机制Chrome,甚至是一些IDE(同样,VS Code通过Chrome调试界面集成调试客户端Javascript也很出色)。警告:您必须发明一些调试 - 构建 - 部署工作流,以便将调试时热重新加载功能,构建时捆绑和缩小,资产的发布时复制,等。

  2. 如果您正在将后端从ASP.NET代码库移动到ASP.NET核心代码库,请首先让您的客户端调用两个不同的端点(一个运行您的传统后端托管传统的端点) API,另一个运行新的后端)。然后,逐步将代码移植到新的代码库中,并改进您的客户端,以便为您移植的API调用新的后端。最终,在移植所有API后,将您的遗留后端落下。与此同时,您可能还需要将ASP.NET核心代码库中的一些后端调用代理到旧的ASP.NET代码库。

  3. 最后,我故意这样说,如果您的客户端应用程序将成为SPA,请考虑使用Node JS作为后端。

  4. 到目前为止,这是我的旅程。我始终发现Big VS在客户端Javascript编码和调试方面缺乏功能和工具,而VS Code是这类工作的领先IDE。因此,我将我的客户端开发工作完全从我的VS解决方案中移除的动机。

    最后,我在客户端SPA以及我的新Node JS后端使用Typescript。我无法想象在没有Typescript的情况下编写一个大型JS项目。但有了它,我正在自信地开发我们的React前端以及我们的Node JS后端。没有更多的重复对象接口/类定义,冗余DTO等。事情只是更好地和连贯地融合在一起。我说这是一个粉丝和长期的ASP.NET + Core开发者,所以这里没有意识形态动机,只是实际推理。