asp.net-core - 如何显示自定义 404 页面而不是浏览器的默认页面?当我使用我的 Razor Pages 应用程序时
问题描述
如果您在浏览器中键入http://google.com/ShowMeYourCustom404PageEnter
,然后按。您将被重定向到 Google 404 页面。
如果我们在 github https://github.com/ShowMeYourCustom404Page上应用相同的概念。它将向您显示:
现在,如果您使用我的 Razor 页面应用程序,它将显示浏览器提供的默认选项。但我不希望这样,我想展示我的自定义 404 Page Error.cshtml
。
我知道有一个方法调用RedirectToPage()
。并且可以在这种情况下使用。
public IActionResult OnGet(int id) { if (id <= 0) return RedirectToPage("/Error"); return Page(); }
但是我不能在不存在的页面上使用`RedirectToPage()`。那么我能做些什么来实现我的目标呢?
解决方案
根据您的描述,我建议您可以尝试使用自定义中间件来实现您的要求。
您可以检查下一个方法后的状态码,然后将请求路径修改为自定义错误错误页面路径。
更多细节,您可以参考以下代码:
自定义中间件:
app.Use(async (ctx, next) =>
{
await next();
if (ctx.Response.StatusCode == 404 && !ctx.Response.HasStarted)
{
ctx.Request.Path = "/error404";
await next();
}
});
将其添加到 Configure 方法中:
public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
if (env.IsDevelopment())
{
app.UseDeveloperExceptionPage();
}
else
{
app.UseExceptionHandler("/Error");
// The default HSTS value is 30 days. You may want to change this for production scenarios, see https://aka.ms/aspnetcore-hsts.
app.UseHsts();
}
app.Use(async (ctx, next) =>
{
await next();
if (ctx.Response.StatusCode == 404 && !ctx.Response.HasStarted)
{
ctx.Request.Path = "/error404";
await next();
}
});
app.UseHttpsRedirection();
app.UseStaticFiles();
app.UseRouting();
app.UseEndpoints(endpoints =>
{
endpoints.MapRazorPages();
});
}
Error404 剃须刀页面:
@page
@model RazorPageRelated.Pages.Error404Model
@{
ViewData["Title"] = "Error404";
}
<h1>Error404</h1>
结果:
推荐阅读
- php - localhost wordpress dev 中的 info.php 未打开
- testing - 如何执行组件级自动化测试 android 和 ios 应用程序?
- sql - 使用同一表中同一列的值更新列
- python - TensorFlow 中的混合动作损失(自定义)函数在训练时给出了 nan (NaN)
- python - 在 python help() 函数中显示没有内容
- laravel - Vuejs v-model 不适用于 Laravel
- c# - 组合框自动完成 SelectedValue 返回 NullReferenceException
- ios - 操作无法完成
- php - PHP 减/减小时/分钟字符串格式为 H:i
- android - Admob 广告不工作(测试广告工作正常,但真实 id 的广告不显示)