听起来有点奇怪,但我会解释一下我想做什么。
我目前有一个用 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。
事实证明比我想象的要容易。
这就是我所做的:
- 在项目中创建一个文件夹,命名为任意名称,例如:“app”
- 运行 ng-build 并将构建文件放入此文件夹中。
- 创建一个控制器来充当应用程序的包装器。我的是AppController
-
在控制器中添加此代码:
public ActionResult Index()
{
return new FilePathResult("~/app/index.html", "text/html");
}
-
我们现在需要处理路线。进入 RoutesConfig.cs 并确保 RegisterRoutes 中有此内容
routes.MapRoute(
name: "Default",
url: "{controller}/{action}/{id}",
defaults: new { controller = "App", action = "Index", id = UrlParameter.Optional }
);
现在您需要通过将“base href”更改为以下内容来编辑角度的index.html:base href="/app/"
(这是因为 Angular 项目的根目录位于您之前创建的文件夹 app 内。)
现在这是棘手的部分,如果你运行它,它会工作,但你很快就会注意到你无法复制并粘贴你的网址而不出现错误。然而,我们很幸运拥有 UrlRewrite!
转到您的应用程序文件夹并创建一个 Web.config(如果尚未创建)。
-
以下是位于应用程序文件夹内的 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(使用前将#替换为@)