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"
这里有一个技巧 - 您必须手动创建文件夹 logs
和 stdout
- 然后并且只有这样 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 服务器之间创建反向代理。
更多信息:
我想在@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"
昨天遇到了这个问题,我们也没有记录,没有任何事件日志消息。
然后我们通过 IIS 管理器检查站点的身份验证设置,以仔细检查设置。然后 pop 突然弹出一个错误消息 'Error on line XXXX'。
原来配置部分在服务器级别的网站配置中被锁定。
于是尝试解锁服务器级别的相关IIS配置设置,如下:
- 打开 IIS 管理器
- Select“连接”窗格中的服务器
- 在主窗格中打开配置编辑器
在“部分”下拉列表中,select 要解锁的部分,例如system.webServer => 安全 => 身份验证
单击右侧窗格中的解锁属性
- 重复您需要解锁的任何其他设置
- 重新启动 IIS(可选)- Select“连接”窗格中的服务器,单击“操作”窗格中的“重新启动”
我正在尝试使用支持 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"
这里有一个技巧 - 您必须手动创建文件夹 logs
和 stdout
- 然后并且只有这样 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 服务器之间创建反向代理。
更多信息:
我想在@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"
昨天遇到了这个问题,我们也没有记录,没有任何事件日志消息。 然后我们通过 IIS 管理器检查站点的身份验证设置,以仔细检查设置。然后 pop 突然弹出一个错误消息 'Error on line XXXX'。 原来配置部分在服务器级别的网站配置中被锁定。
于是尝试解锁服务器级别的相关IIS配置设置,如下:
- 打开 IIS 管理器
- Select“连接”窗格中的服务器
- 在主窗格中打开配置编辑器
在“部分”下拉列表中,select 要解锁的部分,例如system.webServer => 安全 => 身份验证
单击右侧窗格中的解锁属性
- 重复您需要解锁的任何其他设置
- 重新启动 IIS(可选)- Select“连接”窗格中的服务器,单击“操作”窗格中的“重新启动”