UseStatusCodePagesWithReExecute() 不适用于 .NET Core 3.1

Die*_*gos 3 .net .net-core asp.net-core

UseStatusCodePagesWithReExecute如果应用程序出现问题,我通常会将用户重定向到错误页面。

如果我的应用程序中发生错误(例如代码 500),我不会被重定向到“/Home/Error”。如果我手动调用它“/Home/Error”就可以了!

这是我的代码,错误在哪里?

        public IActionResult Error(string code)
        {
            return View(new ErrorModel { RequestId = Activity.Current?.Id ?? HttpContext.TraceIdentifier, ErrorStatusCode = code });
        }



public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
        {
            app.UseSiteOfflineMiddleware(); 

            app.UseStatusCodePagesWithReExecute("/Home/Error", "?code={0}");

            app.UseStaticFiles();
            app.UseRouting();

            app.UseAuthentication(); 
            app.UseAuthorization();
            app.UseSession(); // Aggiungi Supporto Sessioni

            // Dependency Injection Option per leggere Localizzazione File Resources delle lingue
            var localizationOptions = app.ApplicationServices.GetService<IOptions<RequestLocalizationOptions>>().Value;
            app.UseRequestLocalization(localizationOptions);

            app.UseEndpoints(endpoints =>
            {
                endpoints.MapControllerRoute(
                    name: "products",
                    pattern: "{codLanguage}/shop/{id}/{nameProduct}",
                    new { controller = "Catalog", action = "Detail" });

                endpoints.MapControllerRoute(
                    name: "catalog",
                    pattern: "/shop",
                    new { controller = "Catalog", action = "Index" });

                endpoints.MapControllerRoute(
                    name: "default",
                    pattern: "{controller=Home}/{action=Index}/{id?}");
            });


            app.Run(async (context) =>
            {
                await Task.CompletedTask;
            });

        }
Run Code Online (Sandbox Code Playgroud)

Yiy*_*You 5

问题中,正如 Tratcher 提到的,UseStatusCodePagesWithReExecute 用于没有正文的状态代码响应(例如空 404)。而对于像 500 这样的代码,您可以使用 UseExceptionHandler。

如果你想在状态码为500时重定向到“/Home/Error”,你可以这样做:

public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
        {
           app.UseExceptionHandler("/Home/Error");
            app.UseStatusCodePagesWithReExecute("/Home/Error", "?code={0}");
Run Code Online (Sandbox Code Playgroud)