如何在剃须刀页面中重定向到自定义404页面

时间:2019-10-24 14:53:19

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

我正在使用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页面:< / p>

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错误页面。

ErrorFilter:

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重定向到自定义错误页面?

1 个答案:

答案 0 :(得分:1)

您可以使用RedirectToPage帮助方法。例子

return RedirectToPage("Errors/Error404");

您还需要更改

public void OnGet()

收件人

public IActionResult OnGet()