asp.net - 如何在 Razor 页面中重定向到自定义404页面

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

最佳答案

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

return RedirectToPage("Errors/Error404");

而且你还需要改变
public void OnGet()


public IActionResult OnGet()

关于asp.net - 如何在 Razor 页面中重定向到自定义404页面,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58543965/

相关文章:

ubuntu - Nginx 将 www 域重定向到非 www

c# - 在不重复包含指令的情况下向 ASP.NET Web 控件 (ascx) 添加样式和脚本

c# - 在 C# 中,如何在父级上调用方法并将方法调用链接到它的继承层次结构?

c# - 将 IFormFile 转换为 Stream 将内容类型设置为 application/octet-stream

c# - 从 Controller 获取 JsonOptions

php - 禁用 wp-admin 到 wp-login 规范重定向(wordpress)

asp.net-mvc-4 - Response.RedirectPermanent();调用后处理代码

javascript - asp.Net 阻止服务器端与 javascript 的链接

javascript - HTML5 视频强制重新加载/防止缓存

c# - 如何升级到 ASP.NET Core 2.0