ASP.NET Core 6 Web API 和 IIS 10 - 未找到

ASP.NET Core 6 Web API & IIS 10 - Not Found

提问人:uodami 提问时间:11/18/2023 最后编辑:uodami 更新时间:11/20/2023 访问量:83

问:

我正在尝试在 Windows Server 2019 计算机上的 IIS 上部署我的 ASP.NET Core 6 Web API。最终目标是仅在该服务器上或从该服务器(而不是从外部)调用我的 API。localhost:port/swaggerlocalhost:port/{controller}/{action}

这是我到目前为止所拥有的:

  1. 使用以下命令发布 API:dotnet publish --configuration Release
  2. 我安装了 Microsoft .NET 6.0.14 - Windows Server Hosting
  3. 我已经启用了Directory Browsing
  4. 我在 IIS 中添加了一个新站点,并将物理路径指向粘贴已发布输出的文件夹:
  5. 已将绑定配置为 ,IP 地址 Àll Unassigned8080'http, and port

当我单击“浏览”时,它会将我带到 URL ,然后我得到了物理路径中的文件列表,这是正确的。localhost:8080

如果我尝试使用 ,我会得到一个 404,如果我使用 ,我也会得到一个 404。localhost:8080/swaggerlocalhost:8080/{controller}/{getaction}

到目前为止,我做了什么来排除故障:

  1. 我确保我的 IIS 用户有权访问该文件夹
  2. 我已经在文件夹中运行了可执行文件,并且 API 工作正常
  3. 如果我使用 运行 API,我可以成功调用端点dotnet run
  4. 我已经阅读了是否应该在代码中完成任何特定配置,但似乎并非如此

我脑海中浮现出多个问题:

  1. 我应该在代码中进行一些配置吗?
  2. IIS 应该如何运行我的应用程序?它是否运行可执行文件?是在寻找不存在的东西吗?等。
  3. IIS 中是否遗漏了配置?
  4. IIS 是否在寻找可执行文件、DLL?
  5. IIS 如何识别哪个是主 DLL?

还有什么应该配置的吗?

localhost 托管 NET-6.0 IIS-10 Windows-Server-2019

评论

0赞 Lex Li 11/18/2023
如果你只想工作,那么你选择了太宽的绑定。403.14 是预期的,因为 Web API 没有要显示的默认网页。如果您想解决与 swagger 相关的 404 问题,请展示您的源代码。localhost
0赞 uodami 11/18/2023
明白了。启用目录浏览后,我看到了已发布文件夹中的文件列表。我真正想解决的是我无法进行任何 API 调用的事实。我提出的任何请求都有 404,无论是 localhost:8080/swagger 还是 localhost:8080/controller/action。但是,如果我使用 dotnet run 运行应用程序,则这些调用会成功。我将分享一些代码。
0赞 YurongDai 11/20/2023
你能提供一个最小的可重复的例子吗?

答:

0赞 J.Memisevic 11/18/2023 #1

在应用程序池 -> -> 上,添加IIS_IUSRS用户。然后,您的应用池将在此标识下运行,并有权访问文件夹。Advanced SettingsIdentity

如果您已经这样做了,请尝试修改用户的文件夹安全性This folder, subfolder and files

0赞 uodami 11/20/2023 #2

在浪费了大量时间试图了解发生了什么之后,我创建了一个新的 Web API,这是包含 Forecast 控制器的默认生成模板。我尝试在IIS中创建一个站点,就像我为我的API所做的那样,它起作用了。 在比较了两个项目的配置后,我终于找到了问题所在。

出于某种原因,在我的 中,我有以下内容:csproj

<PublishSingleFile>true</PublishSingleFile>
<RuntimeIdentifier>win-x64</RuntimeIdentifier>
<PlatformTarget>x64</PlatformTarget>

此外,我的项目的输出类型是 而不是 。exeConsole application

这导致生成一个不包含主 DLL 的发布文件夹;它只包含应用程序和其他几个文件。 当我更改配置以匹配新生成的 API 时,发布文件夹的结构与为 Forecast API 生成的结构相同。exe

做完这些之后,我通过IIS成功访问了我的网站,加载了swagger页面,并发送了请求。