用 Angular 2 应用程序替换现有的 MVC 项目

2023-12-27

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

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

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

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

我的解决方案 1 是将 Angular 应用程序和 api 分开:因此,我在 www.mysite.com 上发布 Angular 网站,并在 api.mysite.com 上发布 api。

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

编辑: 如果解决方案 2 可行:如何在项目中包含 Angular 2 应用程序而不与 mvc 项目发生路由冲突。换句话说,我想删除 MVC 路由。


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

事实证明比我想象的要容易。

这就是我所做的:

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

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

       routes.MapRoute(
          name: "Default",
          url: "{controller}/{action}/{id}",
          defaults: new { controller = "App", action = "Index", id = UrlParameter.Optional }
        );
    
  6. 现在您需要通过将“base href”更改为以下内容来编辑角度的index.html:base href="/app/"(这是因为 Angular 项目的根目录位于您之前创建的文件夹 app 内。)

  7. 现在这是棘手的部分,如果你运行它,它会工作,但你很快就会注意到你无法复制并粘贴你的网址而不出现错误。然而,我们很幸运拥有 UrlRewrite!

转到您的应用程序文件夹并创建一个 Web.config(如果尚未创建)。

  1. 以下是位于应用程序文件夹内的 Web.config 文件的内容。

    <?xml version="1.0"?>
     <configuration>
      <system.web>
       <compilation debug="true" targetFramework="4.0"/>
      </system.web>
    
      <system.webServer>
       <rewrite>
       <rules>
        <rule name="Angular Routes" stopProcessing="true">
         <match url=".*" />
          <conditions logicalGrouping="MatchAll">
          <add input="{REQUEST_FILENAME}" matchType="IsFile" negate="true" />
          <add input="{REQUEST_FILENAME}" matchType="IsDirectory" negate="true" />
          <add input="{REQUEST_URI}" pattern="^/(api)" negate="true" />
         </conditions>
         <action type="Rewrite" url="/app/" />
         </rule>
       </rules>
      </rewrite>
     </system.webServer>
    </configuration>
    

这甚至会忽略模式 site.com/api,因此您的 api 调用仍然有效!另外,这里的神奇之处在于 action type="Rewrite" url="/app/" 的行,这将解决无法复制粘贴链接的问题。最后,如果您有 mvc 控制器并且尝试访问它们,它仍然可以工作。

Voila.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

用 Angular 2 应用程序替换现有的 MVC 项目 的相关文章

  • 如何在 Cassandra 中存储无符号整数?

    我通过 Datastax 驱动程序在 Cassandra 中存储一些数据 并且需要存储无符号 16 位和 32 位整数 对于无符号 16 位整数 我可以轻松地将它们存储为有符号 32 位整数 并根据需要进行转换 然而 对于无符号 64 位整
  • 为什么 GCC 不允许我创建“内联静态 std::stringstream”?

    我将直接前往 MCVE include
  • 如何在 C++ 中标记字符串?

    Java有一个方便的分割方法 String str The quick brown fox String results str split 在 C 中是否有一种简单的方法可以做到这一点 The 增强分词器 http www boost o
  • 用于 FTP 的文件系统观察器

    我怎样才能实现FileSystemWatcherFTP 位置 在 C 中 这个想法是 每当 FTP 位置添加任何内容时 我都希望将其复制到我的本地计算机 任何想法都会有所帮助 这是我之前问题的后续使用 NET 进行选择性 FTP 下载 ht
  • 访问外部窗口句柄

    我当前正在处理的程序有问题 这是由于 vista Windows 7 中增强的安全性引起的 特别是 UIPI 它阻止完整性级别较低的窗口与较高完整性级别的窗口 对话 就我而言 我想告诉具有高完整性级别的窗口进入我们的应用程序 它在 XP 或
  • 在 Unity 中实现 Fur with Shells 技术

    我正在尝试在 Unity 中实现皮毛贝壳技术 http developer download nvidia com SDK 10 5 direct3d Source Fur doc FurShellsAndFins pdf Fins 技术被
  • 如何获取 EF 中与组合(键/值)列表匹配的记录?

    我有一个数据库表 其中包含每个用户 年份组合的记录 如何使用 EF 和用户 ID 年份组合列表从数据库获取数据 组合示例 UserId Year 1 2015 1 2016 1 2018 12 2016 12 2019 3 2015 91
  • 两个静态变量同名(两个不同的文件),并在任何其他文件中 extern 其中一个

    在一个文件中将变量声明为 static 并在另一个文件中进行 extern 声明 我认为这会在链接时出现错误 因为 extern 变量不会在任何对象中看到 因为在其他文件中声明的变量带有限定符 static 但不知何故 链接器 瑞萨 没有显
  • 如何定义一个可结构化绑定的对象的概念?

    我想定义一个concept可以检测类型是否T can be 结构化绑定 or not template
  • 两个类可以使用 C++ 互相查看吗?

    所以我有一个 A 类 我想在其中调用一些 B 类函数 所以我包括 b h 但是 在 B 类中 我想调用 A 类函数 如果我包含 a h 它最终会陷入无限循环 对吗 我能做什么呢 仅将成员函数声明放在头文件 h 中 并将成员函数定义放在实现文
  • Angular 模板验证表单

    我正在研究表单验证 我正在使用模板驱动的验证表单 其编码如下 现在工作正常 但是当我尝试添加时 username ngModel and password ngModel 在创建验证类的输入中 它向我显示一个错误 也请找到该错误 div c
  • 如何在 Linq to SQL 中使用distinct 和 group by

    我正在尝试将以下 sql 转换为 Linq 2 SQL select groupId count distinct userId from processroundissueinstance group by groupId 这是我的代码
  • C 函数 time() 如何处理秒的小数部分?

    The time 函数将返回自 1970 年以来的秒数 我想知道它如何对返回的秒数进行舍入 例如 对于100 4s 它会返回100还是101 有明确的定义吗 ISO C标准没有说太多 它只说time 回报 该实现对当前日历时间的最佳近似 结
  • 有没有办法让 doxygen 自动处理未记录的 C 代码?

    通常它会忽略未记录的 C 文件 但我想测试 Callgraph 功能 例如 您知道在不更改 C 文件的情况下解决此问题的方法吗 设置变量EXTRACT ALL YES在你的 Doxyfile 中
  • 相当于Linux中的导入库

    在 Windows C 中 当您想要链接 DLL 时 您必须提供导入库 但是在 GNU 构建系统中 当您想要链接 so 文件 相当于 dll 时 您就不需要链接 为什么是这样 是否有等效的 Windows 导入库 注意 我不会谈论在 Win
  • C++ 继承的内存布局

    如果我有两个类 一个类继承另一个类 并且子类仅包含函数 那么这两个类的内存布局是否相同 e g class Base int a b c class Derived public Base only functions 我读过编译器无法对数
  • 使用特定参数从 SQL 数据库填充组合框

    我在使用参数从 sql server 获取特定值时遇到问题 任何人都可以解释一下为什么它在 winfom 上工作但在 wpf 上不起作用以及我如何修复它 我的代码 private void UpdateItems COMBOBOX1 Ite
  • 指针和内存范围

    我已经用 C 语言编程有一段时间了 但对 C 语言还是很陌生 有时我对 C 处理内存的方式感到困惑 考虑以下有效的 C 代码片段 const char string void where is this pointer variable l
  • 现代编译器是否优化乘以 1 和 -1

    如果我写 template
  • 使用 WGL 创建现代 OpenGL 上下文?

    我正在尝试使用 Windows 函数创建 OpenGL 上下文 现代版本 基本上代码就是 创建窗口类 注册班级 创建一个窗口 choose PIXELFORMATDESCRIPTOR并设置它 创建旧版 OpenGL 上下文 使上下文成为当前

随机推荐

  • 如何以编程方式确定包含哪些待签入项目?

    我可以查询 PendingSets 和候选 PendingSets 并且似乎无法区分包含的挂起更改和排除的挂起更改 我在包含的更改中包含一个文件 可以通过 Visual Studio 团队资源管理器签入 使用 Tfs dll 查询 我得到有
  • 附件的 HTTP 响应标头内容处置

    背景 将 XML 文档写入浏览器的响应流 并使浏览器显示 另存为 对话框 Problem 考虑以下download method HttpServletResponse response getResponse BufferedWriter
  • 更改上下文节点的 XSLT 指令/函数列表?

    有谁知道更改上下文节点的 XSLT 指令 函数列表 例如 像这样的指令for each是其中之一 更改上下文的明显 XSLT 2 0 指令是for each apply templates for each group and analyz
  • 将在 JBoss 4.2 上运行良好的应用程序部署到 JBoss 5 时出错

    我尝试将应用程序 ear 文件 部署到 JBoss 5 但收到以下错误 该应用程序在 4 2 2 下部署良好 15 31 33 172 ERROR AbstractKernelController Error installing to R
  • 如何从 pandas DataFrame 输出带有合并单元格的 html 表格

    我有一个 pandas DataFrame df 作为 gt gt gt df pd DataFrame 1 2 2 2 3 1 2 3 3 3 1 3 2 3 5 7 9 9 3 2 columns list ABCDE I want t
  • 使用 R-markdown knitr hooks 自定义 HTML 报告中的表格格式

    我正在尝试建立一个knitr knit hooks 自动格式化 R markdown 块的数据帧输出kableExtra在我的 HTML 报告中 我不想重复将以下行 或任何行 添加到每个列表数据块的末尾 head iris gt kable
  • App Store 中的应用内购买被拒绝

    我的免费应用程序刚刚从应用程序商店被拒绝 我上传了 3 个应用程序 HD iPad PayedIphone 和 freeiphone 在免费版本中 我有一个完整版本的链接 显然我需要免费版本的 inAppPurchase 而不是链接到完整版
  • 未找到未捕获的模块 jqueryify

    我的情况 我正在查看 spin js 以获取我正在考虑编写的 Web 应用程序 我已阅读所有文档并浏览了所有示例 现在 我尝试在我自己的 Windows 7 笔记本电脑上运行 spin contacts 示例项目 我正在运行适用于 Wind
  • 实体框架 GroupBy 采用 mySQL 最古老的

    我有一个巨大的项目列表 需要按一个属性对它们进行分组 然后应该选择每组中最古老的 简化示例 选择每个用户中最旧的用户FirstName using ED NWEntities ctx new ED NWEntities IQueryable
  • 如何使用 numpy 构建排序数组? (什么是等级数组?)

    我希望你们所有人都度过愉快的一天 在我的 Python 课上 我们正在学习如何使用 Numpy 因此我们收到了有关该内容的作业 我的问题是 什么是排名数组以及如何使用 python 构建它 我的老师试图用这些台词解释这一点 但我实际上什么也
  • 如何在 YAWS/Erlang 中发送消息以接收

    通常在 Erlang 程序员中使用 在并发编程中发送消息以接收符号 但是我们如何在雅司病中做到这一点 说我正在尝试这样做 gt
  • 如何在 Rust 中解码和编码浮点数?

    我想在 Rust 中解码 存储和编码浮点数 我知道关于num Float integer decode https docs rs num 0 1 36 num trait Float html tymethod integer decod
  • Android 中 Google 地图上的图像平铺

    我正在开发一个 Android 应用程序 我在 Android 中的 Google 地图上放置了图像图块 我可以用简单的 javascript 来做 但谁能告诉我如何在 android 中做到这一点 这是我的 JavaScript 代码 f
  • 将打印重定向到日志文件

    好的 我已经完成了我的第一个Python程序 它有大约1000行代码 在开发过程中我放置了大量print使用运行命令之前的语句os system 说类似的话 print running command cmd os system cmd 现
  • 如何在多行 Vim 缩写中 Eatchar

    我想在 Vim 中触发多行缩写 无需输入 触发 字符 并且光标在特定位置以插入模式结束 我已经快到了 但只是没能成功 到目前为止 我已将以下内容添加到我的 vimrc 中 eat characters after abbreviation
  • 链接到使用 GCC5 编译的库时,clang 中未定义的引用

    我尝试使用 libmuparser 的 ubuntu 15 10 存储库版本 包 libmuparser2v5 使用 gcc 编译工作正常 但使用 clang 则不行 我对此进行了更深入的研究 提出了以下最小 非 工作示例和一些问题 考虑一
  • Android Volley 缓存不同的 POST 请求

    我正在使用 Android Volley 来缓存请求 当我使用 GET 时效果很好 但由于某些原因我转而使用 POST 现在我想用不同的 POST 数据缓存相同的 URL 请求 1 gt URL1 POST 数据 Cat 1 请求 2 gt
  • 使用 GUID 作为主键的最佳实践是什么,特别是在性能方面? [关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 我有一个应用程序 几乎在所有表中都使用 GUID 作为主键 并且我读到 使用 GUID 作为主键时存在性能问题 老实说 我没有看到任何问题 但我
  • Chrome DevTools 中帧渲染的空闲时间

    在研究网页渲染优化时 我在许多流行网站上遇到了奇怪的渲染行为 帧渲染时间的很大一部分是没有任何操作的空白空间 Apple 促销页面的示例 https i stack imgur com L00lb png 在该时间范围内唯一运行的就是 GP
  • 用 Angular 2 应用程序替换现有的 MVC 项目

    听起来有点奇怪 但我会解释一下我想做什么 我目前有一个用 C 编写的 MVC 网站 该网站使用 Razor 视图 在同一个项目中 我添加了一个 API 可以像这样访问 www mysite com api controller get 只需