ASP.NET Core Web应用程序的Web.config设置作为ASP.NET Core Web应用程序中的子应用程序?

时间:2017-07-04 19:15:02

标签: asp.net-core asp.net-core-mvc asp.net-core-webapi

拥有" 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标记是禁忌,因为应用程序拒绝配置为格式错误。

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

1 个答案:

答案 0 :(得分:1)

是的,配置方法完全不对。将配置文件保存在父应用程序中并在子应用程序中进行简单的处理程序排除(注释掉)会使配置问题发生魔力。

父:

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

子:

<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中对父配置方法进行真正的粗略添加。 (https://github.com/aspnet/Hosting/issues/416#issuecomment-149046552

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

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

并在创建的新Configure1方法中,我从我的子应用程序中复制了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();
        }

我不喜欢我的父应用程序中的子应用程序目录路径和子应用程序逻辑,因为它是一个紧绷的耦合,只是感觉不对。但正如我所理解的那样,这就是现在的事情。