我的ASP.NET核心Web API项目和Angular项目是否需要在IIS中有一个单独的网站?

gwbalxhn  于 2022-11-12  发布在  .NET
关注(0)|答案(2)|浏览(152)

如何在IIS中托管此simple tutorial的已发布结果?是否有最佳实现方法的指导?
该解决方案包含一个ASP.NET Core Web API项目(后端)和一个Angular项目(前端)。它在VS 2022中工作(使用IIS Express)。当我发布后端项目时,它还包含wwwroot文件夹,其中包含Angular文件(见下文)。
在IIS中(在我的Windows 10工作站上),我添加了一个绑定到http端口84的新Web站点,并将应用程序池设置为“无托管代码”,并将其指向发布文件夹(请参见下文)。

  • http://localhost:84* 的结果是404,但是http://localhost:84/weatherforecast按预期返回JSON响应。Web API项目按预期工作,但是Angular部分不工作。

我可以在IIS中将这两个项目作为单独的Web站点托管,并且我必须执行两个单独的发布步骤(没什么大不了的),但是Web API发布文件夹仍将包含带有Angular文件的wwwroot文件夹,这感觉不对。
另一个选择是创建一个同时包含WebAPI和Angular文件的项目,但这也是错误的。
考虑到Microsoft的指导(通过教程)是拥有单独的项目并将它们发布在一起,似乎有一种很好的方法可以在IIS中以这种方式托管它们,并且该社区中的某个人知道答案(任何其他陷阱也很感谢)。

C:\kk\AngularTypeScript\publish
|-- Backend.deps.json
|-- Backend.dll
|-- Backend.exe
|-- Backend.runtimeconfig.json
|-- Microsoft.OpenApi.dll
|-- Swashbuckle.AspNetCore.Swagger.dll
|-- Swashbuckle.AspNetCore.SwaggerGen.dll
|-- Swashbuckle.AspNetCore.SwaggerUI.dll
|-- appsettings.Development.json
|-- appsettings.json
|-- web.config
`-- wwwroot
    |-- 3rdpartylicenses.txt
    |-- favicon.ico
    |-- index.html
    |-- main.e3e89bda804b4330.js
    |-- polyfills.69ca295dd26cc35d.js
    |-- runtime.f8659de94caf0803.js
    `-- styles.ef46db3751d8e999.css

2vuwiymt

2vuwiymt1#

我的建议是按照微软的教程一起发布它们,至于你得到的404错误,检查你是否安装了url重写,如果没有,安装它。
Install URL Rewrite

kuuvgm7e

kuuvgm7e2#

我最终找到了这个答案自己,所以我会把它贴在这里,以防它帮助别人下来线。
这里的关键部分是在ASP.NET核心Web API项目的Program.cs文件中添加了以下两行代码。

app.UseDefaultFiles();
app.UseStaticFiles();

此外,我还将IIS网站的授权规则配置为允许所有用户(这不是生产建议,这是为了让它在您的本地计算机上运行)。(在发布步骤中自动生成),您需要通过IIS执行此步骤(每次发布时),或者向项目中添加一个web.config文件,并在其中包含相关的代码段。(FWIW,我包含了一个web.config文件)。

我将我的项目命名为Backend,这就是为什么您会看到Backend.dll(您需要相应地更改它)。

<?xml version="1.0" encoding="utf-8"?>
<configuration>
    <location path="." inheritInChildApplications="false">
        <system.webServer>
            <handlers>
                <add name="aspNetCore" path="*" verb="*" modules="AspNetCoreModuleV2" resourceType="Unspecified" />
            </handlers>
            <aspNetCore processPath="dotnet" arguments=".\Backend.dll" stdoutLogEnabled="false" stdoutLogFile=".\logs\stdout" hostingModel="inprocess" />
        </system.webServer>
    </location>
    <system.webServer>
        <security>
            <authorization>
                <add accessType="Allow" users="*" />
            </authorization>
        </security>
    </system.webServer>
</configuration>

由于我已经有一个Web站点绑定到端口80,因此我将此站点绑定到端口83。
在浏览器中,转到
http://localhost:83以查看Angular 站点负载(使用来自后端Web API的数据)

http://localhost:83/weatherforecast,以查看来自WEB API控制器的JSON响应。

在IIS中托管ASP.NET核心还有其他必要的步骤,但这些步骤并不专门针对此问题。
希望这对其他人有帮助!

相关问题