虚拟目录中的 Azure 多个站点

Azure multiple sites in virtual directories

我有 3 个 asp.net 核心站点需要部署在同一个域中(子域不能使用我的 SSL 证书)。

当我部署 api 和身份项目时,它们工作正常。但是,在部署单页应用程序时,api 和身份停止工作。

The page cannot be displayed because an internal server error has occurred.

错误立即出现,所以我猜它可能在启动早期就失败了。 单页应用程序运行正常。

似乎水疗中心在干扰,我尝试了 的解决方案来忽略路由,但我得到了同样的错误。

我已尝试解决方案 以获得更具描述性的错误,但无济于事。

不知道从这里到哪里去

问题的原因是根应用程序和子应用程序都添加了 aspNetCore 处理程序,导致配置系统崩溃。您可以通过在 Azure 门户中打开 详细错误消息 ,然后在 D:\home\LogFiles\DetailedErrors 下找到错误页面来查看。您会看到此错误:

Cannot add duplicate collection entry of type 'add' with unique key attribute 'name' set to 'aspNetCore'

有两种方法可以解决这个问题。

第一种是使用location标签来防止继承。具体来说,将您的根应用程序的 web.config 从以下内容更改为:

<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <system.webServer>
    <handlers>
      <add name="aspNetCore" path="*" verb="*" modules="AspNetCoreModule" resourceType="Unspecified" />
    </handlers>
    <aspNetCore processPath="dotnet" arguments=".\myapp.dll" stdoutLogEnabled="false" stdoutLogFile="\?\%home%\LogFiles\stdout" />
  </system.webServer>
</configuration>

像这样:

<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <location path="." inheritInChildApplications="false">
    <system.webServer>
      <handlers>
        <add name="aspNetCore" path="*" verb="*" modules="AspNetCoreModule" resourceType="Unspecified" />
      </handlers>
      <aspNetCore processPath="dotnet" arguments=".\myapp.dll" stdoutLogEnabled="false" stdoutLogFile="\?\%home%\LogFiles\stdout" />
    </system.webServer>
  </location>
</configuration>

第二种方法是从 sub 应用程序中删除 <handlers> 部分以避免重复(如 doc 中建议的 子应用的配置):

<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <system.webServer>
    <aspNetCore processPath="dotnet" arguments=".\mySubApp.dll" stdoutLogEnabled="false" stdoutLogFile="\?\%home%\LogFiles\stdout" />
  </system.webServer>
</configuration>