Web.config 将 ASP.NET 核心网络应用程序设置为 ASP.NET 核心网络应用程序中的子应用程序?

Web.config settings for ASP.NET Core web app as a sub-app within a ASP.NET Core web app?

"WebsiteA" 尝试在其中托管另一个应用程序 "API"。使用名为 "services" 的文件夹。从我读过的内容来看,为了让子应用程序正常工作,我必须将我的处理程序移至父配置。所以作为 .NET Core 的新手,我确定我错过了一些简单的东西,但是在父级中设置处理程序是这样的:

    <system.webServer>
    <handlers>
      <add name="aspNetCoreAPI" path="services\*" verb="*" modules="AspNetCoreModule" resourceType="Unspecified" />
      <add name="aspNetCore" path="*" verb="*" modules="AspNetCoreModule" resourceType="Unspecified" />

    </handlers>
    <aspNetCore processPath="dotnet" arguments=".\websiteA.dll" stdoutLogEnabled="true" stdoutLogFile=".\logs\stdout" />

    <aspNetCoreAPI processPath="dotnet" arguments=".\services\api.dll" stdoutLogEnabled="true" stdoutLogFile=".\logs\stdout" />


  </system.webServer>

似乎 aspNetCoreAPI 标记是一个禁忌,因为应用程序拒绝了格式错误的配置。

理想情况下,web.config 应如何在此类 api 应用程序的子应用程序场景中设置?

是的,所以配置方法完全不正确。将配置保留在 parent 应用程序中并在 child 应用程序中进行简单的处理程序排除(注释掉)使得配置问题发生了奇迹。

Parent:

<system.webServer>
    <handlers>
      <add name="aspNetCore" path="*" verb="*" modules="AspNetCoreModule" resourceType="Unspecified" />
    </handlers>
    <aspNetCore processPath="dotnet" arguments=".\websiteA.dll" stdoutLogEnabled="true" stdoutLogFile=".\logs\stdout" />
  </system.webServer>

Child:

<system.webServer>
    <handlers>
      <!--<add name="aspNetCore" path="*" verb="*" modules="AspNetCoreModule" resourceType="Unspecified" />-->

    </handlers>
    <aspNetCore processPath="dotnet" arguments=".\api.dll" stdoutLogEnabled="true" stdoutLogFile=".\logs\stdout" />
  </system.webServer>

它们真正的关键是您需要对 Startup.cs 中的 parent 配置方法做一个真正 的补充。 (https://github.com/aspnet/Hosting/issues/416#issuecomment-149046552)

所以我在方法中现有逻辑的底部添加了这个:

app.Map("/services", (app1) => this.Configure1(app1, env, loggerFactory));

在创建的新 Configure1 方法中,我从我的 child 应用程序复制了 Configure 方法:

public void Configure1(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory)
        {
            loggerFactory.AddConsole(Configuration.GetSection("Logging"));
            loggerFactory.AddDebug();

            if (env.IsDevelopment())
            {
                app.UseDeveloperExceptionPage();
            }
            else
            {
                app.UseExceptionHandler("/Home/Error");
            }

            app.UseStaticFiles();

            app.UseMvc();
        }

我不喜欢我的 parent 应用程序中的 child 应用程序目录路径和 sub-application 逻辑,因为它是一种紧密的耦合,感觉不对。但据我了解,这就是目前的情况。