【发布时间】: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