ASP.NET 核心托管 - 500 内部服务器错误

ASP.NET Core hosting - 500 internal server error

我正在尝试使用支持 ASP.NET 核心的托管服务提供商作为 ASP.NET 核心项目发布。我收到 500 Internal Server Error,我认为这很常见。所以我搜索了互联网和各种论坛,然后我检查了 web.config 中的 processPath="%LAUNCHER_PATH%" arguments="%LAUNCHER_ARGS%",它们看起来可以正确转换为 processPath="dotnet" and arguments=".\MyApplication.dll"

我还检查了连接字符串,它指向正在运行的生产数据库服务器。我通过将连接字符串更改为生产数据库和 运行 本地项目来确认数据库连接。它有效,我获得了生产数据库访问权限。

我还尝试通过在 Startup.cs 中使用以下内容来获取错误信息(与环境无关):

app.UseDeveloperExceptionPage();
app.UseDatabaseErrorPage();
app.UseBrowserLink();

我还在 web.config 中启用了 stdoutLog,但我也没有看到该文件夹​​:

stdoutLogEnabled="true" stdoutLogFile=".\logs\stdout"

我还尝试将 launchSettings.json 中的应用程序Url 和启动 Url 更改为我的产品 Url,但效果不佳。

因此,500 Internal Server Error 拒绝消失,我仍然没有有用的错误消息。该页面只是说:

糟糕。 500内部服务器错误 启动应用程序时出错。

如果有人能在这里帮助我,我将不胜感激。

I have also enabled stdoutLog in web.config as but I don't see that folder either:

stdoutLogEnabled="true" stdoutLogFile=".\logs\stdout"

这里有一个技巧 - 您必须手动创建文件夹 logsstdout - 然后并且只有这样 IIS 才会在 logs 文件夹中创建日志文件(而不是 stdout 如你所料) - 不要问我为什么,因为我不知道为什么 ;)


Oops. 500 Internal Server Error An error occurred while starting the application.

通常,意味着 Startup.cs 中的配置问题 - 最常见的问题包括数据库本身的问题、迁移问题(如果您使用代码优先方法)、[=29= 的问题], Social Logins 凭据的问题(比如缺少 SecretKey)...

请参阅 .\logs\stdout 中的日志文件 - 这是查找问题详细信息的最快方法:)


app.UseDeveloperExceptionPage();

app.UseDatabaseErrorPage();

这些将在您的 WebApp 完全启动后起作用,但不会在启动应用程序时起作用。

感谢 Lukasz 的评论。我能够看到日志,它指出 "ClientId option must be provided"。问题出在 UserSecrets 上。由于 secrets.json 仅在开发中可用,因此在生产中找不到任何秘密。一旦我在 appSettings.json 中掌握了秘密,它就可以正常工作。

此外,要在本地环境中复制它,只需转到项目属性并将本地环境变量 ASPNETCORE_ENVIRONMENT 更改为 'Production' 和 运行。这将在本地复制 500 Internal Server Error,您将收到错误消息。

此外,确保安装了 ASP.NET 核心 Windows 服务器托管包。这会在 IIS 和 Kestral 服务器之间创建反向代理。

更多信息:

https://docs.microsoft.com/en-us/aspnet/core/publishing/iis?tabs=aspnetcore2x#tabpanel_tfsY37MhAQ_aspnetcore2x

我想在@Lukasz Makowej 的回答中添加更多信息。

我找到了必须创建文件夹的原因,在微软文档中说:

stdoutLogFile - 可选字符串属性。

"......路径中提供的任何文件夹必须存在,模块才能创建日志文件...."

所以你必须自己创建它:) 在这里查看:

https://docs.microsoft.com/en-us/aspnet/core/host-and-deploy/aspnet-core-module?view=aspnetcore-2.0

我还必须说,在我的情况下,我必须验证该网站是否有权访问 "log" 文件夹。

标准日志对我不起作用,我不得不从服务器和我的本地卸载所有 .ENT Core 运行时/SDK 版本以安装最新版本,并且在从头开始重新发布所有内容后它起作用了。

另一件有用的事情是在没有任何 dns 的情况下将 IIS 应用程序绑定到端口 5000,所以它实际上向我显示了 http://localhost:5000

上的错误

确保你的 web.config 是好的。我不止一次被语法上好的 web.config 所困扰,它引用了一个不在服务器上的模块 (Rewrite)。除了 500 响应错误之外,任何地方都没有错误消息。

在 web.config 文件中将 modules="AspNetCoreModuleV2" 更改为 modules="AspNetCoreModule"

并观看此视频 https://www.youtube.com/watch?v=clCR3k6kkD8

昨天遇到了这个问题,我们也没有记录,没有任何事件日志消息。 然后我们通过 IIS 管理器检查站点的身份验证设置,以仔细检查设置。然后 pop 突然弹出一个错误消息 'Error on line XXXX'。 原来配置部分在服务器级别的网站配置中被锁定。

于是尝试解锁服务器级别的相关IIS配置设置,如下:

  • 打开 IIS 管理器
  • Select“连接”窗格中的服务器
  • 在主窗格中打开配置编辑器
  • 在“部分”下拉列表中,select 要解锁的部分,例如system.webServer => 安全 => 身份验证

  • 单击右侧窗格中的解锁属性

  • 重复您需要解锁的任何其他设置
  • 重新启动 IIS(可选)- Select“连接”窗格中的服务器,单击“操作”窗格中的“重新启动”