I have a big problem with an application. When I use IIS Express, everything works fine, but if I start the app with IIS (both with or without Visual Studio), the Program.cs
and Startup.cs
are ignored so the app is not working.
This happen both with .NET Core 2.2 and .NET Core 3.1 and also with Razor Pages or MVC projects.
The strange thing is that IIS was working until yesterday and I haven't done any changes, only a computer restart between two days. This both in my notebook and desktop PC.
I don't understand why but this is driving me crazy. Do you have any suggestions for solve the issue?
Program.cs
public class Program
{
public static void Main(string[] args)
{
CreateHostBuilder(args)
.Build()
.Run();
}
public static IHostBuilder CreateHostBuilder(string[] args) =>
Host.CreateDefaultBuilder(args)
.ConfigureWebHostDefaults(webBuilder =>
{
webBuilder.UseStartup<Startup>();
});
}
Startup.cs
public const string GenericCookieScheme = "XXX";
public const string AuthSecret = "XXX";
public Startup(IConfiguration configuration)
{
Configuration = configuration;
}
public IConfiguration Configuration { get; }
// This method gets called by the runtime. Use this method to add services to the container.
public void ConfigureServices(IServiceCollection services)
{
services.AddRazorPages(options =>
{
options.Conventions.AuthorizePage("/Pages");
options.Conventions.AllowAnonymousToFolder("/Pages/Login");
});
services.AddSession();
services.AddControllersWithViews().AddRazorRuntimeCompilation();
services.AddSingleton(Configuration.GetSection("AppSettings").Get<AppSettings>());
#region SERVER
services.AddEntityFrameworkSqlServer()
.AddDbContext<DbConfigContext>(options =>
options.UseSqlServer(Configuration.GetConnectionString("ConfigContainer")));
services.AddEntityFrameworkSqlServer()
.AddDbContext<DbDataContext>(options =>
options.UseSqlServer(Configuration.GetConnectionString("DataContainer")));
services.AddScoped<ITenantProvider, TenantProvider>();
services.AddScoped<IUserProvider, UserProvider>();
services.AddTransient<IDbContextFactory, DbContextFactory>();
DbDataContext.Init();
#endregion
#region AUTHENTICATION
services.AddAuthentication(o =>
{
o.DefaultChallengeScheme = CookieAuthenticationDefaults.AuthenticationScheme;
o.DefaultSignInScheme = CookieAuthenticationDefaults.AuthenticationScheme;
o.DefaultAuthenticateScheme = CookieAuthenticationDefaults.AuthenticationScheme;
}).AddCookie(options =>
{
options.AccessDeniedPath = new PathString("/Login");
options.LoginPath = new PathString("/Login");
});
#endregion
services.Configure<IISOptions>(options =>
{
options.AutomaticAuthentication = false;
});
services.AddSingleton<IHttpContextAccessor, HttpContextAccessor>();
}
// This method gets called by the runtime. Use this method to configure the HTTP request pipeline.
public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
if (env.IsDevelopment())
{
app.UseDeveloperExceptionPage();
}
else
{
app.UseExceptionHandler("/Error");
// The default HSTS value is 30 days. You may want to change this for production scenarios, see https://aka.ms/aspnetcore-hsts.
app.UseHsts();
}
app.UseHttpsRedirection();
var defaultCulture = new CultureInfo("it-IT");
var localizationOptions = new RequestLocalizationOptions
{
DefaultRequestCulture = new RequestCulture(defaultCulture),
SupportedCultures = new List<CultureInfo> { defaultCulture },
SupportedUICultures = new List<CultureInfo> { defaultCulture }
};
app.UseRequestLocalization(localizationOptions);
app.UseHttpsRedirection();
app.UseSession();
app.UseAuthentication();
app.UseStaticFiles();
app.UseRequestLocalization("it-IT");
app.UseRouting();
app.UseRouter(r =>
{
r.MapGet(".well-known/acme-challenge/{id}", async (request, response, routeData) =>
{
var id = routeData.Values["id"] as string;
var file = Path.Combine(env.WebRootPath, ".well-known", "acme-challenge", id);
await response.SendFileAsync(file);
});
});
app.UseAuthorization();
app.UseEndpoints(endpoints =>
{
endpoints.MapRazorPages();
});
using (var serviceScope = app.ApplicationServices.GetRequiredService<IServiceScopeFactory>().CreateScope())
{
var t = serviceScope.ServiceProvider.GetService<IHttpContextAccessor>();
#region CONFIG CONTAINER
if (!serviceScope.ServiceProvider.GetService<DbConfigContext>().AllMigrationsApplied())
{
serviceScope.ServiceProvider.GetService<DbConfigContext>().Database.Migrate();
}
serviceScope.ServiceProvider.GetService<DbConfigContext>().EnsureSeeded(env.WebRootPath);
#endregion
#region DATA CONTAINER
var dbContextFactory = serviceScope.ServiceProvider.GetService<IDbContextFactory>();
//var allTenants = serviceScope.ServiceProvider.GetService<SigfridAppConfigContext>().Tenants.First();
var context = dbContextFactory.CreateDbContext(Configuration);
if (!context.AllMigrationsApplied())
{
context.Database.Migrate();
}
//serviceScope.ServiceProvider.GetService<DbDataContext>().EnsureSeeded(Guid.Parse("A2DDFB53-3221-41E7-AD27-F3CD70EC5BAF"));
#endregion
}
}
Please check if your IIS has the hosting bundle for ASP.NET Core
installed.
Check it here:
If not, download and install it here:
Please check if there is a file named web.config
located in your site's root folder:
And its content shall be similar like this:
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<location path="." inheritInChildApplications="false">
<system.webServer>
<handlers>
<add name="aspNetCore" path="*" verb="*" modules="AspNetCoreModuleV2" resourceType="Unspecified" />
</handlers>
<aspNetCore processPath="dotnet" arguments=".\Aiursoft.Account.dll" stdoutLogEnabled="false" stdoutLogFile=".\logs\stdout" hostingModel="inprocess" />
</system.webServer>
</location>
</configuration>
Check the part: <aspNetCore>
under <system.webServer>
.
Ok I found the problem. Duplicated routes. I have a route called "/dashboard" with a controller in controller folder and the same in api folder. I don't know why there is no error of "duplicated route" but now it's fine. I'm sorry for having wasted your time with a stupid problem:)
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.