Я использую ASP.NET Core 3.0 и Razor Pages. Я пытаюсь вручную перенаправить на свою страницу ошибки 404 из Index.cshtml.cs (у меня есть некоторые импорта, и я хочу показать 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, а не мои пользовательские 404page:
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?