Я устанавливаю образец 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>