【问题标题】:Publish ASP.Net Core App on local IIS - Content not found在本地 IIS 上发布 ASP.Net Core 应用程序 - 找不到内容
【发布时间】:2020-11-11 15:30:40
【问题描述】:

我使用以下命令在 Visual Studio Code 中创建了一个项目:

dotnet new angular --use-local-db

此后,我将 Angular 从版本 8 更新到 10 并完成了项目。我测试使用

dotnet watch run

对我来说一切正常,我尝试在本地 IIS 上发布它。可悲的是,我不会让它运行。我尝试了在几个页面上找到的不同解决方案,最终使用 Visual Studio 在 IIS 上发布项目。我使用了以下说明,除了 Code First 迁移,因为必要的数据库已经存在: https://docs.microsoft.com/en-us/aspnet/web-forms/overview/deployment/visual-studio-web-deployment/deploying-to-iis#create-the-publish-profile

问题是,如果我这样做,Visual Studio 将创建一个名为“myproject”的“应用程序”。然后当我在其上运行“浏览...”时,我将在控制台中收到以下错误:

Failed to load resource: the server responded with a status of 404 (Not Found) style. ... .css

Failed to load resource: the server responded with a status of 404 (Not Found) runtime-es2015. ... .css

Failed to load resource: the server responded with a status of 404 (Not Found) polyfills-es2015. ... .css

Failed to load resource: the server responded with a status of 404 (Not Found) main-es2015. ... .css

提到的文件夹在提到的目录('ClientApp\dist')上。有什么我错过的配置或设置吗?

任何帮助将不胜感激。


第一次回复后编辑:

Startup.cs

public void ConfigureServices(IServiceCollection services)
{
    ...
    services.AddSpaStaticFiles(configuration =>
    {
        configuration.RootPath = "ClientApp/dist";
    });
    ...
}

public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
    ...
    app.UseHttpsRedirection();
    app.UseStaticFiles();
    ...
    app.UseRouting();
    ...
    app.UseSpa(spa =>
    {
        spa.Options.SourcePath = "ClientApp";

        if (env.IsDevelopment())
        {
            spa.UseAngularCliServer(npmScript: "start");
        }
    });
}      

第二次回复后编辑:

这里有一些目录/路径。希望在这里找到需要的一次。

项目结构

[Root]
    ClientApp
        src
            app
                [Angular Web App related files]
                app.module.ts
                ...
            main.js
            index.html
            styles.css
            polyfills.ts
            ...
        package.json
        angular.json
    [ASP.NET Core Web API Files]
    appsettings.json
    [Project].csproj
    Program.cs
    Startup.cs

IIS 文件

wwwroot
    [Project]
        ClientApp
            dist
                index.html
                main. ... .js
                polyfills. ... .js
                runtime. ... .js
                styles. ... .css
        [ASP.NET Core Web API Files]

如何在浏览器中调用项目:

localhost/[Project]

当我按下 ctrl+U 并尝试访问文件时显示的路径:

Requested URL: localhost:Port/main. ... .js
Physical Path: ...\wwwroot\main. ... .js

新观察:

如果我从

修改角度客户端的 index.html
 <base href="/" />

 <base href="/[projectname]/" />

页面正在 IIS 上的 Prod 中加载,但在开发模式下失败。 然后在 IIS 上的 Prod 中,它使用 url localhost/api/[controller] 而不是工作 url localhost/[projectname]/api/[controller]。最后提到的 url 我可以通过在浏览器中输入它来访问它并返回数据。

如果我随后修改控制器的服务文件来自

...
return this.http.get('/api/[controller]')
...

...
return this.http.get('[projectname]/api/[controller]')
...

它尝试访问路径:localhost/[projectname]/[projectname]/api/[controller]

知道我配置错误或需要更改配置以使项目在 Prod 和 Dev 模式下工作吗?

任何帮助将不胜感激。

【问题讨论】:

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


    【解决方案1】:

    首先确保您的 URL 正确,按 control + U 并尝试单击您的 CSS 文件路径,并确保路径正确,然后从IIS 管理器。

    【讨论】:

    • 首先,感谢您的反馈,对延迟回复表示歉意。我点击了路径并得到“404 - Not Found”。所以这似乎是问题所在。物理路径显示它试图在 wwwroot 文件夹中查找文件。我不确定如何解决这个问题。我将 Startup.cs 中的信息添加到主帖中。
    • 我是否配置错误或缺少什么?
    • 你能告诉我你的文件路径和项目结构吗?检查您的路径,您可能需要使用相对路径而不是绝对路径。最后,检查您的 IIS 设置并确保您可以提供静态文件。
    • 感谢您的帮助。我希望我明白了:项目结构或多或少是dotnet new angular 的默认结构,因此 api 文件和 startup.cs、program.cs 位于根目录上。 ClientApp 中的 Angular 文件。 IIS“服务器”上发布的代码位于根目录,所以它是wwwroot\[Project] -&gt; API Fileswwwroot\[Project]\ClientApp\dist -&gt; Angular Web Client Files。据我了解,它应该使用物理路径wwwroot\[Project]\ClientApp\dist,但使用wwwroot\[Project] 来获取必要的文件。这是您需要的信息吗?
    • 顺便说一句:为 IIS 启用了静态文件作为功能。你最后的提示是这个意思吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-06-20
    • 2019-01-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-11-13
    相关资源
    最近更新 更多