繁体   English   中英

HTTP 错误 404:在 IIS 上部署 Web API(最小 API NET 7)

[英]HTTP Error 404: Deployment of a Web API (minimal API NET 7) on IIS

我可能在 IIS 上遇到了设置问题(它是一个具有真实 URL 域的 Web 服务器,因此可以随时从外部访问)。 我创建了一个具有最小 API NET 7 的 Web API。在测试身份验证之前,我尝试先到达一个端点。 我将此端点命名为/api/test并将其定义为[AllowAnonymous] 在通过 Swagger 的开发服务器上,一切都已经在运行(包括登录或令牌生成)。 但是在发布的 web api 版本中,我注释掉了 Swagger。

现在,当我在 IIS 服务器上安装 Web 应用程序时,然后当我通过 IIS 服务器调用应用程序时(以及当我在浏览器本身中输入地址时),我收到消息: HTTP 错误 404.0 - 未找到详细的错误信息是:

  • 模块:IIS Web 核心
  • 通知:MapRequestHandler
  • 处理程序:静态文件
  • 错误代码:0x80070002
  • 请求的网址: http ://api.testapp.com:64591/api/test
  • 物理路径:C:\inetpub\wwroot\Testapp\api\test
  • 登录方式:匿名
  • 用户登录:匿名

最可能的原因:

  • 此 Web 服务器上不存在指定的目录或文件。
  • URL 包含拼写错误。
  • 对该文件的访问受到自定义过滤器或模块(如 URLScan)的限制。

但是,如果我通过dotnet Testapp.dll在控制台中运行该应用程序,那么它就会启动,然后如果我在浏览器中输入 URL http://localhost:5000/api/test,我就会得到数据。

所以只能是IIS App设置出了问题。 顺便说一下,我还安装了ASP.NET Core 7.0 Runtime (v7.0.1) - Windows Hosting Bundle 在 IIS 上设置应用程序时,我使用了以下指南: http ://www.technical-recipes.com/2018/running-asp-net-web-api-services-in-iis/

谁能帮我提出任何建议?

谢谢

编辑

按照 Lex 的建议(请参阅下面他的评论),我安装了 Jexus Manager 软件并运行了诊断程序。 这是报告:


重要提示:本报告可能包含机密信息。 在与他人分享之前掩盖这些。

系统时间:15.12.2022 10:18:45 处理器架构:AMD64 操作系统:Microsoft Windows NT 10.0.17763.0 服务器类型:IIS

扫描 28 个已安装的模块。 .NET Core 3.1 及更高版本安装了 ASP.NET Core 模块版本 2:C:\Program Files\IIS\Asp.Net Core Module\V2\aspnetcorev2.dll (17.0.22323.1)。

扫描 44 个注册处理程序。 没有为此网站注册有效的 ASP.NET Core 处理程序。 要在 IIS 上运行 ASP.NET Core,请参阅https://docs.microsoft.com/en-us/aspnet/core/host-and-deploy/iis/index了解更多详细信息。

编辑 2

我离这个问题越来越近了。 根本错误是我使用了发布文件夹中的应用程序文件,而不是发布文件夹中的应用程序文件!

我现在已经正确复制了该应用程序,当我在 IIS 中启动该应用程序时,浏览器打开,我可以通过 Api 链接请求数据,因此它在服务器本地工作。 我现在遇到的问题是它不能从外部工作:我收到消息:

ERR_CONNECTION_TIMED_OUT

该消息还出现在应该使用此 Web API 的 MAUI 应用程序中:连接尝试失败,因为连接方在一段时间后没有正确响应,或者建立的连接失败,因为连接的主机没有响应。 (api.website.com:64500)

我再次启动诊断工具,得到以下输出:


重要提示:本报告可能包含机密信息。 在与他人分享之前掩盖这些。

  • 系统时间:15.12.2022 10:33:27

  • 处理器架构:AMD64

  • 操作系统:Microsoft Windows NT 10.0.17763.0

  • 服务器类型:IIS

  • 扫描 28 个已安装的模块。

  • .NET Core 3.1 及更高版本安装了 ASP.NET Core 模块版本 2:C:\Program Files\IIS\Asp.Net Core Module\V2\aspnetcorev2.dll (17.0.22323.1)。

扫描 45 个注册处理程序。

  • 找到一个有效的 ASP.NET Core 处理程序作为 { 名称:aspNetCore,路径:*,- 状态:已启用,模块:AspNetCoreModuleV2,条目类型:本地}。 检测到 Visual C++ 运行时(预期:14.0,检测到:14.24.28127.4 构建者:vcwrkspc):C:\Windows\system32\msvcp140.dll。 使用应用程序池“WebApplication1”。 池标识是 IIS AppPool\WebApplication1 请确保池标识具有对内容文件夹 C:\inetpub\wwwroot\WebApplication1 的读取访问权限。 池位数是 64 位扫描 aspNetCore 部分。 “进程路径”:点网。 “参数”:.\WebApplication1.dll。 “hostingModel”:进程中。
  • 检测到进程内托管模型。 为避免 500.xx 错误,请确保已发布工件的位数与检测到的应用程序池位数相匹配 依赖于框架的部署。 跳过位数检查。 找到运行时配置文件 C:\inetpub\wwwroot\WebApplication1\WebApplication1.runtimeconfig.json。 运行时为 7.0.0。

现在可以了。 如果其他人有类似的问题(IIS上NET 7下的Minimal Api application),那么这里有几个提示:

  • 如果您发布应用程序,则必须通过 Publish 进行(因为例如 Web-Config 也在 Release not generated 下)
  • .NET Core Hosting Bundle 必须安装在 IIS 服务器上。
  • 确保在防火墙下打开所需的端口,否则无法进行外部访问
  • 如果出现问题,那么安装应用程序 Jexus Manager 并在应用程序中使用诊断工具是有意义的。

所以,希望我没有错过任何东西。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM