提问人:uodami 提问时间:11/18/2023 最后编辑:uodami 更新时间:11/20/2023 访问量:83
ASP.NET Core 6 Web API 和 IIS 10 - 未找到
ASP.NET Core 6 Web API & IIS 10 - Not Found
问:
我正在尝试在 Windows Server 2019 计算机上的 IIS 上部署我的 ASP.NET Core 6 Web API。最终目标是仅在该服务器上或从该服务器(而不是从外部)调用我的 API。localhost:port/swagger
localhost:port/{controller}/{action}
这是我到目前为止所拥有的:
- 使用以下命令发布 API:
dotnet publish --configuration Release
- 我安装了 Microsoft .NET 6.0.14 - Windows Server Hosting
- 我已经启用了
Directory Browsing
- 我在 IIS 中添加了一个新站点,并将物理路径指向粘贴已发布输出的文件夹:
- 已将绑定配置为 ,IP 地址 Àll Unassigned8080'
http
, and port
当我单击“浏览”时,它会将我带到 URL ,然后我得到了物理路径中的文件列表,这是正确的。localhost:8080
如果我尝试使用 ,我会得到一个 404,如果我使用 ,我也会得到一个 404。localhost:8080/swagger
localhost:8080/{controller}/{getaction}
到目前为止,我做了什么来排除故障:
- 我确保我的 IIS 用户有权访问该文件夹
- 我已经在文件夹中运行了可执行文件,并且 API 工作正常
- 如果我使用 运行 API,我可以成功调用端点
dotnet run
- 我已经阅读了是否应该在代码中完成任何特定配置,但似乎并非如此
我脑海中浮现出多个问题:
- 我应该在代码中进行一些配置吗?
- IIS 应该如何运行我的应用程序?它是否运行可执行文件?是在寻找不存在的东西吗?等。
- IIS 中是否遗漏了配置?
- IIS 是否在寻找可执行文件、DLL?
- IIS 如何识别哪个是主 DLL?
还有什么应该配置的吗?
答:
在应用程序池 -> -> 上,添加IIS_IUSRS用户。然后,您的应用池将在此标识下运行,并有权访问文件夹。Advanced Settings
Identity
如果您已经这样做了,请尝试修改用户的文件夹安全性This folder, subfolder and files
在浪费了大量时间试图了解发生了什么之后,我创建了一个新的 Web API,这是包含 Forecast 控制器的默认生成模板。我尝试在IIS中创建一个站点,就像我为我的API所做的那样,它起作用了。 在比较了两个项目的配置后,我终于找到了问题所在。
出于某种原因,在我的 中,我有以下内容:csproj
<PublishSingleFile>true</PublishSingleFile>
<RuntimeIdentifier>win-x64</RuntimeIdentifier>
<PlatformTarget>x64</PlatformTarget>
此外,我的项目的输出类型是 而不是 。exe
Console application
这导致生成一个不包含主 DLL 的发布文件夹;它只包含应用程序和其他几个文件。
当我更改配置以匹配新生成的 API 时,发布文件夹的结构与为 Forecast API 生成的结构相同。exe
做完这些之后,我通过IIS成功访问了我的网站,加载了swagger页面,并发送了请求。
评论
localhost