Как перенаправить на пользовательскую страницу 404 на страницах бритвы - PullRequest
0 голосов
/ 24 октября 2019

Я использую 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?

1 Ответ

1 голос
/ 24 октября 2019

Вы можете использовать вспомогательный метод RedirectToPage . Пример

return RedirectToPage("Errors/Error404");

И вам также нужно изменить

public void OnGet()

на

public IActionResult OnGet()
...