gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-03 08:06:21 25 4
gpt4 key购买 nike

我正在使用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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com