【问题标题】:"500 - Internal server error" when calling ASP.NET Core 2.1 Web API on Windows Server在 Windows Server 上调用 ASP.NET Core 2.1 Web API 时出现“500 - 内部服务器错误”
【发布时间】:2019-02-15 15:06:33
【问题描述】:

我有一个 ASP .Net Core 2.1 Web API,我已将它部署到我们最近购买的新服务器(运行 Windows Server 2016 Standard)。该 API 在我的开发 PC 和我们的旧服务器(运行 Windows Server 2012 R2)上都能完美运行。但是在这个新服务器上,我得到了这个错误:

500 - Internal server error.
There is a problem with the resource you are looking for, and it cannot be displayed.

我记得一年前为了让它在我们的旧服务器上运行也付出了很多努力。我最终确实让它工作了,但我不记得我做了什么!有没有办法获得有关此错误的更多信息?我检查了新服务器上的 Windows 事件查看器,那里什么也没有。此外,虽然我的 web.config 中有 stdoutLogEnabled="true",但它不会生成日志 - 我已经创建了 \logs\ stdout 路径,因此文件夹确实存在...

我的 Startup.cs 中也有 app.UseDeveloperExceptionPage();,但我没有收到更多关于简单的 500 内部服务器错误的信息.

这就是我的 web.config 的样子:

<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <location path="." inheritInChildApplications="false">
    <system.webServer>
      <handlers>
        <add name="aspNetCore" path="*" verb="*" modules="AspNetCoreModule" resourceType="Unspecified" />
      </handlers>
      <aspNetCore processPath="dotnet" arguments=".\PropWorx.API.dll" stdoutLogEnabled="true" stdoutLogFile=".\logs\stdout" />
    </system.webServer>
  </location>
</configuration>
<!--ProjectGuid: cfa62a1f-c5f6-43f8-bcbe-04068e40b803-->

我还安装了 Microsoft .NET Core 2.1.1 - Windows Server Hosting 和 Microsoft .NET Core Runtime - 2.1.1(都是 x86和 x64)。

就像我说的它可以在我的开发 PC 和我们的旧服务器上运行,所以它一定是新服务器上的配置问题。除了 500 Internal Server Error 之外,还有什么方法可以获得更详细的错误信息?

【问题讨论】:

  • 尝试从 cmd 或 power shell 手动运行您的 api。拨打电话并在此处发布错误消息。
  • 在服务器上打开命令提示符并运行dotnet.exe MyApp.dll。看看那里是否有任何错误。如果是这样,您将能够在命令提示符窗口中看到堆栈跟踪。如果不是,那么这是一个 IIS 问题。假设您已经正确安装了托管包,请确保您之后重新启动服务器,或者完全重新启动 IIS 服务(iisreset 还不够)。
  • 感谢爱德华和克里斯。我在命令提示符下使用 DOTNET RUN 在服务器上运行 API(在 IIS 或 IIS Express 中运行它吗??),我使用 Postman on(也从服务器,调用 localhost:5001/api/test)调用其端点。似乎一切正常 - 我可以在命令提示符窗口上看到 EF Core 生成和执行的 SQL 查询。但是没有任何东西可以回到 Postman。邮递员只是超时......但在命令提示符下一切似乎都很好。它没有显示任何错误...太奇怪了..

标签: asp.net-core iis asp.net-core-webapi asp.net-core-2.1 kestrel


【解决方案1】:

我有一个过时版本的 .NET Core Windows Server Hosting 捆绑包。我安装了 2.1.1 版。我删除了它,并安装了 2.1.4 版,现在它可以工作了。

【讨论】:

    【解决方案2】:

    各种原因都可能导致此问题。

    如果这仅在浏览器中发生(使用 curl 或 postman),则可能是飞行前请求错误,那么您将需要修改 UrlScan.ini(我假设这在 Windows 2016 上没有更改)在以下路径 (C:\Windows\System32\inetsrv\urlscan),将 OPTIONS 添加到 [AllowVerbs]。

    如果没有,请确保您按照 Microsoft 文档中提供的步骤操作:

    https://docs.microsoft.com/en-us/aspnet/core/host-and-deploy/iis/?view=aspnetcore-2.1&tabs=aspnetcore2x

    您可能需要安装Visual C++ 2015 Redistributable on the server

    要获取日志,请更改“IncludeScopes”:true,在您的 appsettings.json 日志记录部分中,还要检查事件查看器。

    【讨论】:

    • 感谢 KYG。是的,我确实安装了 Visual C++ 2015。我尝试使用 DOTNET RUN 在服务器上本地运行 API(不确定它是在 IIS 还是 IIS Express 中运行),并在服务器上使用 Postman 对其进行测试。似乎一切正常 - 当我调用操作时,我可以看到 EF Core 生成和执行的 SQL 查询。但是没有任何东西可以回到 Postman。邮递员只是超时......但在命令提示符下一切似乎都很好。它没有显示任何错误......太奇怪了......
    • 另外,即使我修改了 web.config 以包含 stdoutLogEnabled="true",并在 stdoutLogFile=".\logs\stdout" 中创建了相应的文件夹,并添加了 "IncludeScopes": true 到appsettings.json 的登录部分,它没有记录任何内容。它甚至没有在事件查看器上记录任何错误。 ://
    • 不客气,您的 appsettings.json 中的 LogLevel 设置是什么?现在邮递员返回的HTTP代码是什么?如果您没有收到日志,这意味着您在执行请求时没有任何警告或错误,要查看您需要将默认更改为“信息”的所有日志。
    • 我注意到一件事......在服务器上的 IIS 上,当访问我的站点并尝试打开任何链接时,例如“错误页面”或“日志记录”或任何IIS 上的快捷方式,它给出了这个错误:\\?\C:\inetpub\propworxapi\web.config
    • 我在 appsettings.json 中的默认 LogLevel 是“警告”。我现在已将其更改为“信息”,但它仍然没有记录任何内容。但我的猜测是因为没有错误。我认为 API 执行得很完美。我怀疑这只是来自 API 的回复没有到达客户端(在这种情况下是邮递员)。在邮递员上,它甚至没有得到返回的 HTTP 状态代码....邮递员似乎只是在等待响应超时。当我使用 DOTNET BUILD 从 cmd 手动运行 API 时,一切似乎都正常执行......没有任何错误。
    猜你喜欢
    • 2017-03-07
    • 2019-10-24
    • 2018-08-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-05-28
    相关资源
    最近更新 更多