【问题标题】:How to redirect to custom 404 page in razor pages如何在剃须刀页面中重定向到自定义 404 页面
【发布时间】:2020-02-20 22:43:49
【问题描述】:

我正在使用 ASP.NET Core 3.0 和 Razor 页面。我正在尝试手动从 Index.cshtml.cs 重定向到我的自定义 404 错误页面(我有一些导入,并且我想在出现数据问题时显示 404)。

Startup.cs:enter code here

public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
   if (env.IsDevelopment())
   {
       app.UseDeveloperExceptionPage();
   }
   else
   {
       app.UseExceptionHandler("/errors/Error500");
       app.UseStatusCodePagesWithReExecute("/errors/Error{0}");
       app.UseHsts();
   }
   ...

}

我的 404 错误页面位于 /Errors/Status404.cshtml。当我运行应用程序并尝试直接转到 /Errors/Status404 时,页面正在按预期解析。

Index.cshtml.cs 以不同的方式尝试使其工作,不幸的是,它们都没有像我希望的那样工作 - 要么它不做任何事情,要么它返回系统 404 页面而不是我的自定义 404 页面:

public class IndexModel : PageModel
    {
        public void OnGet()
        {
            HttpContext.Response.Clear();
            HttpContext.Response.StatusCode = 404;

            HttpContext.Response.Redirect("/Errors/Error404");

            return StatusCode(404); //tried to return IActionResult from OnGet()

            return RedirectToPage();
        }
    }

我还尝试在上面返回 StatusCode(404) 并创建了一个自定义过滤器,以便我可以从那里重定向到我的自定义 404,不幸的是这也返回了服务器 404 错误页面。

错误过滤器:

public class ErrorFilter : Attribute, IAlwaysRunResultFilter
    {

        public void OnResultExecuting(ResultExecutingContext context)
        {
            if (context.Result is StatusCodeResult statusCodeResult &&
                statusCodeResult.StatusCode == 404)
            {
                //context.Result = new ObjectResult("Can't process this!")
                //{
                //    StatusCode = 404,
                //};
                context.HttpContext.Response.Redirect("Errors/Error404");
            }
        }
    }

如何重定向到 Index.cshtml.cs 或 ErrorFilter 中的自定义错误页面?

【问题讨论】:

    标签: asp.net asp.net-core redirect error-handling .net-core


    【解决方案1】:

    您可以使用RedirectToPage 辅助方法。示例

    return RedirectToPage("Errors/Error404");
    

    而且你还需要改变

    public void OnGet()
    

    public IActionResult OnGet()
    

    【讨论】:

      猜你喜欢
      • 2012-10-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-01-07
      • 2021-10-20
      • 2022-10-16
      • 1970-01-01
      • 2021-12-20
      相关资源
      最近更新 更多