Маршрутизация .NET Core 2.1 MVC не работает самостоятельно - PullRequest
0 голосов
/ 12 ноября 2018

Я устанавливаю образец Identity Server с использованием IdentityServer4 и интерфейса быстрого запуска Identity Server.У меня все работает локально, и когда я запускаю свой проект из Visual Studio (или через dotnet), он работает правильно, и пользовательский интерфейс отображается.

Однако я хочу опубликовать это в Azure, и при публикации пользовательский интерфейс не отображается.Я знаю, что приложение работает, потому что я могу направить к конечной точке API HealthCheck, которую я добавил (используя маршрутизацию атрибута на контроллере).Однако, когда я пытаюсь перейти на домашнюю страницу, я получаю сообщение об ошибке 404.Я могу воспроизвести это, запустив dotnet TestApp.dll.Хотя это происходит только при запуске в автономном режиме (я получаю домашний экран при запуске с IISExpress или dotnet run).

Вот мой файл startup.cs:

public class Startup
{
    private IConfiguration _config;
    // This method gets called by the runtime. Use this method to add services to the container.
    // For more information on how to configure your application, visit https://go.microsoft.com/fwlink/?LinkID=398940
    public void ConfigureServices(IServiceCollection services)
    {
        //Do this first so we always have a logger, even if errors occur in other services
        services.AddApplicationInsightsTelemetry(_config);

        services.AddCors();
        services.AddOptions();
        services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_1);


        var migrationsAssembly = typeof(Startup).GetTypeInfo().Assembly.GetName().Name;
        var connectionString = _config.GetConnectionString("IdentityServerDatabase");

        services.AddIdentityServer()
              .AddDeveloperSigningCredential()
              // this adds configuration data to the database (scopes, clients, claims, etc.)
              .AddConfigurationStore(options =>
              {
                  options.ConfigureDbContext = builder =>
                      builder.UseSqlServer(connectionString,
                          sql => sql.MigrationsAssembly(migrationsAssembly));
              })
            // this adds the operational data from DB (codes, tokens, consents)
            .AddOperationalStore(options =>
            {
                options.ConfigureDbContext = builder =>
                    builder.UseSqlServer(connectionString,
                        sql => sql.MigrationsAssembly(migrationsAssembly));

                // this enables automatic token cleanup. this is optional.
                options.EnableTokenCleanup = true;
                options.TokenCleanupInterval = 30;
            });
    }

    // This method gets called by the runtime. Use this method to configure the HTTP request pipeline.
    public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILogger<Startup> logger)
    {
        var config = _config.GetValue<string>("ApplicationInsights:InstrumentationKey");
        logger.LogInformation("Starting up Identity Provider");

        if (env.IsDevelopment())
        {
            logger.LogDebug("Starting in development mode, using detailed exception pages.");
            app.UseDeveloperExceptionPage();
        }

        app.UseStaticFiles();

        app.UseIdentityServer();

        app.UseMvcWithDefaultRoute();
    }

    public Startup(IConfiguration configuration)
    {
        _config = configuration;
    }
}

и моя программа.cs: ​​

public class Program
{
    public static void Main(string[] args)
    {
        try
        {
            Console.WriteLine("Starting System");
            CreateWebHostBuilder(args).Build().Run();
        } catch(Exception e)
        {
            Console.WriteLine($"Fatal Error: {e.Message}");
        }

    }

    public static IWebHostBuilder CreateWebHostBuilder(string[] args) =>
        WebHost.CreateDefaultBuilder(args)
            .UseSerilog((hostingContext, loggerConfiguration) => 
                loggerConfiguration
                    .ReadFrom.Configuration(hostingContext.Configuration)
                    .WriteTo.ApplicationInsightsTraces(hostingContext.Configuration.GetValue<string>("ApplicationInsights:InstrumentationKey"))
                    .Enrich.FromLogContext()
                    .Enrich.WithExceptionDetails()
                    .Enrich.WithProperty("Application", "TestApp")
            )
            .UseApplicationInsights()
            .UseStartup<Startup>();
}

и файл моего проекта:

<Project Sdk="Microsoft.NET.Sdk.Web">

  <PropertyGroup>
    <TargetFramework>netcoreapp2.1</TargetFramework>
  </PropertyGroup>

  <PropertyGroup>
    <PublishWithAspNetCoreTargetManifest>false</PublishWithAspNetCoreTargetManifest>
  </PropertyGroup>

  <ItemGroup>
    <PackageReference Include="IdentityServer4" Version="2.2.0" />
    <PackageReference Include="IdentityServer4.EntityFramework" Version="2.1.1" />
    <PackageReference Include="Microsoft.ApplicationInsights.AspNetCore" Version="2.5.1" />
    <PackageReference Include="Microsoft.AspNetCore.App" />
    <PackageReference Include="Microsoft.AspNetCore.Razor.Design" Version="2.1.2" PrivateAssets="All" />
    <PackageReference Include="Microsoft.VisualStudio.Web.CodeGeneration.Design" Version="2.1.5" />
    <PackageReference Include="Serilog" Version="2.7.1" />
    <PackageReference Include="Serilog.AspNetCore" Version="2.1.1" />
    <PackageReference Include="Serilog.Exceptions" Version="4.1.0" />
    <PackageReference Include="Serilog.Settings.Configuration" Version="3.0.1" />
    <PackageReference Include="Serilog.Sinks.ApplicationInsights" Version="2.6.0" />
    <PackageReference Include="Serilog.Sinks.Console" Version="3.1.1" />
  </ItemGroup>

  <ItemGroup>
    <WCFMetadata Include="Connected Services" />
  </ItemGroup>

</Project>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...