【问题标题】:ASP.net Core 2.0 Application as Sub ApplicationASP.net Core 2.0 应用程序作为子应用程序
【发布时间】:2018-03-08 16:52:42
【问题描述】:

我有一个托管在 IIS 中的现有 Web 应用程序,它是一个 ASP.NET MVC 应用程序。假设这是以www.mysite.com 托管的。我正在尝试将 .NET Core 2.0 Web 应用程序作为子应用程序托管。

但是当我尝试以www.mysite.com/subaApp 访问它时,IIS 正在根路径 (www.mysite.com) 中查找我的所有静态文件(jscss 等)。

如果有任何可用的解决方案,请告诉我。 (我的 .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>

【问题讨论】:

  • 你是如何引用你的静态文件的?你能提供一个页面的最小可行示例吗?
  • 我的默认文件是 index.html 作为 Angular 5 构建的一部分生成的,它看起来像这样:

标签: angular asp.net-core-2.0


【解决方案1】:

VS 在内部使用 Angular CLI 来构建和部署 Angular 文件。这就是您的索引文件将在构建过程中被修改的方式。

你可以将你的build命令设置的内容更改为client app文件夹中的package.json文件如下方式

ng build --base-href  --deploy-url /subsite

这将更改将在 index.html 文件中生成的 JS 和 css 文件的路径。

Reference

【讨论】:

  • 这种方式对我有用:ng build --base-href "/subsite/" --prod
【解决方案2】:

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

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

Razor 处理完视图后,最终看起来像:

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

在常规 C# 代码中,您可以访问 UrlHelper 的实例(控制器、视图组件)或注入 IUrlHelperFactory 并自己创建一个(在请求生命周期内运行的其他类,例如标签助手),您可以利用 Content 方法获取上下文 URL。

对于其他静态文件中的引用,例如 CSS 导入、CSS 背景图像等,您应该使用相对路径的 URL。例如,如果您需要在wwwroot\css 的样式表中包含wwwroot\images 的背景图片,那么您可以这样做:

background-image: url('../images/myimage.jpg');

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

【讨论】:

  • 正如我所提到的,它基本上是一个 Angular 5 应用程序,所以我直接使用在构建 Angular 应用程序时生成的 index.html。它在生成时定义了所有路径。当我将它部署为根应用程序时,这工作正常。但是当它部署为子应用程序时会出现问题。所以应该有一些方法告诉 IIS 我的根不是'/"而是'/subApp。
  • 这不是 Angular 控制的行为,而是浏览器如何解释路径(或缺少您提供的路径)。你需要在你的 src 脚本路径前加上 ~/
  • 看看这个答案,了解浏览器如何解释路径:stackoverflow.com/a/24028813/105518
  • @chrispratt 如果选择了 Angular 应用程序作为模板,您能否指导我们。他们不会对此有强烈的看法。
【解决方案3】:

您应该在 .NET Core 应用程序的 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();
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-07-16
    • 2018-03-28
    • 1970-01-01
    • 2018-03-06
    • 1970-01-01
    • 2018-06-14
    • 1970-01-01
    • 2018-05-16
    相关资源
    最近更新 更多