好的,我只想为这个问题添加一个更新的答案,因为它是第一个出现在谷歌上的问题,我很难让当前的答案起作用。
您需要在applicationhost.config中更改 3 件事以使其正常工作。
在 VS2022 中生成的配置会生成一个带有项目名称的 AppPool(在我的示例中为“ IISVirtualFolderFix AppPool ”)
步骤1)更改应用程序的路径
在配置部分,应该有一个生成的名称属性与您的项目名称相同(在我的示例中为“ IISVirtualFolderFix ”)。
应该已经有一个应用程序在使用当前的应用程序池
<site name="IISVirtualFolderFix" id="2">
<application path="/" applicationPool="IISVirtualFolderFix AppPool">
<virtualDirectory path="/" physicalPath="E:\Codes\Experiments\AspNetCore\IISVirtualFolderFix\IISVirtualFolderFix" />
</application>
<bindings>
<binding protocol="http" bindingInformation="*:54180:localhost" />
<binding protocol="https" bindingInformation="*:44381:localhost" />
</bindings>
</site>
您可以将上面的代码更改为
<site name="IISVirtualFolderFix" id="2">
<application path="/" applicationPool="IISVirtualFolderFix AppPool">
<virtualDirectory path="/sub" physicalPath="E:\Codes\Experiments\AspNetCore\IISVirtualFolderFix\IISVirtualFolderFix" />
</application>
<bindings>
<binding protocol="http" bindingInformation="*:54180:localhost" />
<binding protocol="https" bindingInformation="*:44381:localhost" />
</bindings>
</site>
现在的问题是,在它起作用之前你还需要做更多的事情。
步骤 2) 添加根应用程序
该站点需要一个根应用程序才能向下导航到子级。这很容易......只需将 更改为如下所示。
<site name="IISVirtualFolderFix" id="2">
<application path="/"></application>
<application path="/sub" applicationPool="IISVirtualFolderFix AppPool">
<virtualDirectory path="/" physicalPath="E:\Codes\Experiments\AspNetCore\IISVirtualFolderFix\IISVirtualFolderFix" />
</application>
<bindings>
<binding protocol="http" bindingInformation="*:54180:localhost" />
<binding protocol="https" bindingInformation="*:44381:localhost" />
</bindings>
</site>
步骤 3) 允许在子应用程序中处理 aspnetcore
默认情况下,只允许在根目录中处理 asp.net 核心,这意味着您必须允许将此设置继承到所有子应用程序。
应该有一个包含项目文件夹路径的位置部分(在我的示例“ IISVirtualFolderFix ”中,名为“inheritInChildApplications”的属性设置为 false,将其更改为 true。
<location path="IISVirtualFolderFix" inheritInChildApplications="true">
<system.webServer>
<modules>
<remove name="WebMatrixSupportModule" />
</modules>
<handlers>
<add name="aspNetCore" path="*" verb="*" modules="AspNetCoreModuleV2" resourceType="Unspecified" />
</handlers>
<aspNetCore processPath="%LAUNCHER_PATH%" stdoutLogEnabled="false" hostingModel="InProcess" startupTimeLimit="3600" requestTimeout="23:00:00" />
<httpCompression>
<dynamicTypes>
<add mimeType="text/event-stream" enabled="false" />
</dynamicTypes>
</httpCompression>
</system.webServer>
</location>
全部完成。
现在您的子应用程序应该可以工作了。但是,您仍将在根目录中开始调试,这也可以修复。
在 Properties/launchSettings.json 中找到 profiles/IIS Express 对象,并添加 launchUrl 字段。
{
"iisSettings": {
"windowsAuthentication": false,
"anonymousAuthentication": true,
"iisExpress": {
"applicationUrl": "http://localhost:54180",
"sslPort": 44381
}
},
"profiles": {
"IISVirtualFolderFix": {
"commandName": "Project",
"dotnetRunMessages": true,
"launchBrowser": true,
"applicationUrl": "https://localhost:7247;http://localhost:5247",
"environmentVariables": {
"ASPNETCORE_ENVIRONMENT": "Development"
}
},
"IIS Express": {
"commandName": "IISExpress",
"launchUrl": "sub",
"launchBrowser": true,
"environmentVariables": {
"ASPNETCORE_ENVIRONMENT": "Development"
}
}
}
}