在IIS上部署ASPNet核心时,除root以外的其他URI上出现404错误

时间:2018-07-18 13:27:15

标签: c# iis asp.net-core asp.net-core-mvc windows-server-2012

我有一个ASPNet核心应用程序,该应用程序可以在带有Visual Studio的IIS Express上正确运行。

我试图在IIS Server 8.5(带有文件夹)上部署此应用程序。如果我访问根URI(/),则我的页面正确显示(状态200)。但是,如果我尝试访问其他URI(例如/ Meetings),则会收到404错误。

另外,我尝试将应用程序池的标识更改为管理员,并且可以正常工作。但是我知道这不是最佳实践,我找不到为什么它不能与应用程序池标识一起使用。
在某些配置下,请问我是否要指定文件:

web.config:

true

访问日志:

<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>

应用程序池配置:
App pool configuration

我还尝试过更改文件夹的权限,但是不起作用。

如果有人已经遇到了这个问题,我准备尝试其他解决方案。

谢谢

编辑:

此处显示404错误的详细日志:https://paste.ee/p/4PBzY

编辑2:

我在Windows事件中找到了此信息,但是我有一个连接字符串,并且我的SQL Server已与本地帐户配置在一起。

enter image description here

2 个答案:

答案 0 :(得分:1)

确保您已执行以下步骤:

  1. 您需要发布您的网站,然后将IIS网站指向已发布的文件夹
  2. 应用程序池必须设置为No Managed code
  3. 应用程序池标识用户IIS AppPool\{AppPoolName}必须对已发布的网站文件夹具有读取权限。将您的应用程序池的标识更改为 ApplicationPoolIdentity 。对于应用程序池标识,将有一个名称为IIS AppPool\{Applicaiton Pool name}的用户帐户,例如对于DefaultAppPool,用户帐户为IIS AppPool\DefaultAppPool,因此您可以在已发布的应用程序文件夹上允许对Applicaiton Pool用户的读/写访问权限

enter image description here

答案 1 :(得分:0)

好的,我终于找到了问题所在。

查看事件查看器后,我看到该应用程序尝试使用ApplicationPoolIdentity连接到我的SQL Server,如您在下面的屏幕上看到的(对不起,法语屏幕)
enter image description here

因此,我刚刚将此用户添加到具有数据库权限的SQL Server中,并按照Mohsin Mehmood的建议(请参阅其他答案)进行配置,现在它可以正常工作了! enter image description here