Angular ASP.net核心2.0应用程序作为子应用程序

Angular ASP.net核心2.0应用程序作为子应用程序,angular,asp.net-core-2.0,Angular,Asp.net Core 2.0,我有一个托管在IIS中的现有Web应用程序,其中包含一个ASP.NET MVC应用程序。假设这是作为www.mysite.com托管的。我正在尝试托管一个.NETCore2.0Web应用程序作为此应用程序的子应用程序 但当我试图以www.mysite.com/subaApp的身份访问此文件时,IIS正在根路径(www.mysite.com)中查找我的所有静态文件(js,css等) 请让我知道是否有任何解决方案可用于此。(我的.Net Core 2.0应用程序正在为Angular 5应用程序提供服

我有一个托管在IIS中的现有Web应用程序,其中包含一个ASP.NET MVC应用程序。假设这是作为
www.mysite.com
托管的。我正在尝试托管一个.NETCore2.0Web应用程序作为此应用程序的子应用程序

但当我试图以
www.mysite.com/subaApp
的身份访问此文件时,IIS正在根路径(
www.mysite.com
)中查找我的所有静态文件(
js
css
等)

请让我知道是否有任何解决方案可用于此。(我的.Net Core 2.0应用程序正在为Angular 5应用程序提供服务)

我的默认文件(
index.html
)作为Angular 5构建的一部分生成,如下所示:

<script type="text/javascript" src="inline.318b50c57b4eba3d437b.bundle.js"></script>
<script type="text/javascript" src="polyfills.bf95165a1d5098766b92.bundle.js"></script>
<script type="text/javascript" src="main.e0d3a51586e8e9fd039d.bundle.js"></script>

在Razor处理的视图中,您可以利用“主相对”URL来确保放置正确的URL(包括您的虚拟目录)。例如:

<script src="~/path/to/my/script.js"></script>

换句话说,从当前目录(wwwroot\css到wwwroot)上升一级,然后进入images目录(wwwroot\images)。

VS在内部使用Angular CLI构建Angular文件并部署它们。这就是在构建过程中修改索引文件的方式

您可以更改客户端应用程序文件夹中的文件package.json文件,其中的内容将build命令设置为以下方式

ng build --base-href  --deploy-url /subsite
这将更改将在index.html文件中生成的JS和css文件路径的路径


在.NET核心应用程序的Program.cs文件中构建Web主机时,应设置根目录。使用以下方法设置内容根目录

UseContentRoot(Directory.GetCurrentDirectory()
您的Program.cs文件应该与此更相似

public class Program
{
    public static void Main(string[] args)
    {
        BuildWebHost(args).Run();
    }

    public static IWebHost BuildWebHost(string[] args) =>
        WebHost.CreateDefaultBuilder(args)
            .UseContentRoot(Directory.GetCurrentDirectory())
            .UseIISIntegration()
            .UseStartup<Startup>()
            .Build();
}
公共类程序
{
公共静态void Main(字符串[]args)
{
BuildWebHost(args.Run();
}
公共静态IWebHost BuildWebHost(字符串[]args)=>
WebHost.CreateDefaultBuilder(args)
.UseContentRoot(目录.GetCurrentDirectory())
.Useii整合()
.UseStartup()
.Build();
}

如何引用静态文件?你能提供一个最小可行的页面示例吗?我的默认文件是作为angular 5 build的一部分生成的index.html,它看起来是这样的:正如我提到的,它基本上是angular 5应用程序,所以我直接使用在生成angular应用程序时生成的index.html。它在生成时定义了所有路径。当我将它部署为根应用程序时,它工作得很好。但当它部署为子应用程序时,会出现问题。因此,应该有某种方法告诉IIS我的根不是“/”而是“/subApp”。这不是Angular控制的行为,而是浏览器解释路径的方式(或缺少您提供的路径)。你需要在脚本的
src
路径前面加上
~/
。看看这个答案,了解浏览器如何解释路径:@chrispratt如果angular应用程序被选为模板,你能为我们提供指导吗?他们的视图将不会是剃刀视图。这种方法对我有效:ng build--base href”/subsite/“--prod
UseContentRoot(Directory.GetCurrentDirectory()
public class Program
{
    public static void Main(string[] args)
    {
        BuildWebHost(args).Run();
    }

    public static IWebHost BuildWebHost(string[] args) =>
        WebHost.CreateDefaultBuilder(args)
            .UseContentRoot(Directory.GetCurrentDirectory())
            .UseIISIntegration()
            .UseStartup<Startup>()
            .Build();
}