在 IIS 上部署 ASP Net Core 在除 root 之外的其他 URI 上出现 404 错误
Deploying ASPNet core on IIS got 404 errors on other URI than root
我有一个 ASPNet 核心应用程序 运行 在 IIS Express 上正确 Visual Studio。
我试图在 IIS Server 8.5(带文件夹)上部署此应用程序。如果我访问根 URI (/),我的页面会正确显示(状态 200)。但是如果我尝试访问其他 URI(例如:/Meetings),我会收到 404 错误。
另一件事,我试图将应用程序池的身份更改为管理员并且它有效。但我知道这不是最佳做法,而且我找不到为什么它不能使用应用程序池标识。
在一些配置下,问我是否需要特定文件:
web.config :
<configuration>
<!-- To customize the asp.net core module uncomment and edit the following section.
For more info see https://go.microsoft.com/fwlink/?linkid=838655 -->
<system.webServer>
<modules runAllManagedModulesForAllRequests="true" />
<handlers>
<remove name="aspNetCore"/>
<add name="aspNetCore" path="*" verb="*" modules="AspNetCoreModule" resourceType="Unspecified"/>
</handlers>
<aspNetCore processPath="%LAUNCHER_PATH%" arguments="%LAUNCHER_ARGS%" stdoutLogEnabled="false" stdoutLogFile=".\logs\stdout" forwardWindowsAuthToken="false" />
</system.webServer>
</configuration>
访问日志:
2018-07-18 13:14:08 ::1 GET /Meetings - 80 - ::1 Mozilla/5.0+(Windows+NT+6.3;+Win64;+x64)+AppleWebKit/537.36+(KHTML,+like+Gecko)+Chrome/67.0.3396.99+Safari/537.36 - 404 0 0 1422
2018-07-18 13:22:54 ::1 GET / - 80 - ::1 Mozilla/5.0+(Windows+NT+6.3;+Win64;+x64)+AppleWebKit/537.36+(KHTML,+like+Gecko)+Chrome/67.0.3396.99+Safari/537.36 - 200 0 0 1841
应用程序池配置:
我也试过更改文件夹的权限,但没有用。
如果有人遇到过这个问题,我准备尝试不同的解决方案。
谢谢,
编辑:
这里是 404 错误的详细日志:https://paste.ee/p/4PBzY
编辑 2:
我在 windows 事件中找到了此信息,但我有一个连接字符串并且我的 SQL 服务器配置了本地帐户。
确保您已执行以下步骤:
- 您需要发布您的网站,然后将 IIS 网站指向发布的文件夹
- 应用程序池必须设置为
No Managed code
- 应用程序池身份用户
IIS AppPool\{AppPoolName}
必须对已发布的网站文件夹具有读取权限。将应用程序池的标识更改为 ApplicationPoolIdentity。对于应用程序池身份,将有名称为 IIS AppPool\{Applicaiton Pool name}
的用户帐户,例如对于 DefaultAppPool,用户帐户是 IIS AppPool\DefaultAppPool
,因此您可以允许 read/write 访问已发布应用程序文件夹中的应用程序池用户
好的,我终于找到问题所在了。
查看事件查看器后,我看到该应用程序尝试使用 ApplicationPoolIdentity 连接到我的 SQL 服务器,正如您在下面的屏幕上看到的(抱歉是法语屏幕)
所以,我刚刚将此用户添加到 SQL 服务器中,并具有我的数据库权限,并按照 Mohsin Mehmood 建议的方式进行配置(请参阅其他答案),现在可以使用了!
我有一个 ASPNet 核心应用程序 运行 在 IIS Express 上正确 Visual Studio。
我试图在 IIS Server 8.5(带文件夹)上部署此应用程序。如果我访问根 URI (/),我的页面会正确显示(状态 200)。但是如果我尝试访问其他 URI(例如:/Meetings),我会收到 404 错误。
另一件事,我试图将应用程序池的身份更改为管理员并且它有效。但我知道这不是最佳做法,而且我找不到为什么它不能使用应用程序池标识。
在一些配置下,问我是否需要特定文件:
web.config :
<configuration>
<!-- To customize the asp.net core module uncomment and edit the following section.
For more info see https://go.microsoft.com/fwlink/?linkid=838655 -->
<system.webServer>
<modules runAllManagedModulesForAllRequests="true" />
<handlers>
<remove name="aspNetCore"/>
<add name="aspNetCore" path="*" verb="*" modules="AspNetCoreModule" resourceType="Unspecified"/>
</handlers>
<aspNetCore processPath="%LAUNCHER_PATH%" arguments="%LAUNCHER_ARGS%" stdoutLogEnabled="false" stdoutLogFile=".\logs\stdout" forwardWindowsAuthToken="false" />
</system.webServer>
</configuration>
访问日志:
2018-07-18 13:14:08 ::1 GET /Meetings - 80 - ::1 Mozilla/5.0+(Windows+NT+6.3;+Win64;+x64)+AppleWebKit/537.36+(KHTML,+like+Gecko)+Chrome/67.0.3396.99+Safari/537.36 - 404 0 0 1422
2018-07-18 13:22:54 ::1 GET / - 80 - ::1 Mozilla/5.0+(Windows+NT+6.3;+Win64;+x64)+AppleWebKit/537.36+(KHTML,+like+Gecko)+Chrome/67.0.3396.99+Safari/537.36 - 200 0 0 1841
应用程序池配置:
我也试过更改文件夹的权限,但没有用。
如果有人遇到过这个问题,我准备尝试不同的解决方案。
谢谢,
编辑:
这里是 404 错误的详细日志:https://paste.ee/p/4PBzY
编辑 2:
我在 windows 事件中找到了此信息,但我有一个连接字符串并且我的 SQL 服务器配置了本地帐户。
确保您已执行以下步骤:
- 您需要发布您的网站,然后将 IIS 网站指向发布的文件夹
- 应用程序池必须设置为
No Managed code
- 应用程序池身份用户
IIS AppPool\{AppPoolName}
必须对已发布的网站文件夹具有读取权限。将应用程序池的标识更改为 ApplicationPoolIdentity。对于应用程序池身份,将有名称为IIS AppPool\{Applicaiton Pool name}
的用户帐户,例如对于 DefaultAppPool,用户帐户是IIS AppPool\DefaultAppPool
,因此您可以允许 read/write 访问已发布应用程序文件夹中的应用程序池用户
好的,我终于找到问题所在了。
查看事件查看器后,我看到该应用程序尝试使用 ApplicationPoolIdentity 连接到我的 SQL 服务器,正如您在下面的屏幕上看到的(抱歉是法语屏幕)
所以,我刚刚将此用户添加到 SQL 服务器中,并具有我的数据库权限,并按照 Mohsin Mehmood 建议的方式进行配置(请参阅其他答案),现在可以使用了!