我正在使用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重定向到自定义错误页面?
答案 0 :(得分:1)
您可以使用RedirectToPage帮助方法。例子
return RedirectToPage("Errors/Error404");
您还需要更改
public void OnGet()
收件人
public IActionResult OnGet()