【发布时间】:2021-05-29 15:12:55
【问题描述】:
我正在尝试在我的 .NET 5.0 中实现一个自定义 404 页面,以便在 Web 应用程序处于生产状态时使用。我在 Startup.cs 中实现了以下内容;
public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
if (env.IsDevelopment())
{
app.UseDeveloperExceptionPage();
}
else
{
app.UseStatusCodePagesWithRedirects("/Error/{0}");
}
...
}
链接到一个简单的ErrorController
public class ErrorController : Controller
{
[Route("/Error/{statusCode}")]
public IActionResult HttpStatusCodeHandler(int statusCode)
{
switch(statusCode)
{
case 404:
//ViewBag.ErrorMessage("Resource could not be found.");
break;
}
return View("Error");
}
}
然后转到 Shared 中的 Error.cshtml。
这不会删除默认的Status Code: 404; Not Found 页面,但如果我直接通过 url 转到localhost/Error/404,则该页面是可访问的。
这就是我记得使用以前版本的 .NET 实现这一点的方式,但现在我不确定我是否遗漏了什么,或者新的 .NET 5.0 是否有实现自定义 404 页面的新要求。
任何帮助将不胜感激。
编辑:launchSettings.json 个人资料:
"Proj_prod": {
"commandName": "Project",
"dotnetRunMessages": "true",
"launchBrowser": true,
"applicationUrl": "https://localhost:5001;http://localhost:5000",
"environmentVariables": {
"ASPNETCORE_ENVIRONMENT": "Production"
}
}
【问题讨论】:
-
我相信你只是在开发模式下运行应用程序。代码没有问题
-
您可以在 Properties\LaunchSettings.json 中将环境变量 ASPNETCORE_ENVIRONMENT 从 Development 更改为 Production 并再次测试。正如 Alexander Mokin 所说,这是因为您正在测试 int 开发环境。
-
@AlexanderMokin 抱歉没有提到我已经检查以确保
"ASPNETCORE_ENVIRONMENT"设置为"Production"。编辑了问题以包含 launchSettings 配置文件详细信息以防万一。 -
将 ASPNETCORE_ENVIRONMENT 设置为生产并不能保证您正在运行 Proj_prod 配置。默认配置是 IISExpress。在 app.UseStatusCodePagesWithRedirects("/Error/{0}"); 行上放一个断点并检查你是否在启动时点击它。
-
@AlexanderMokin app.UseStatusCodePagesWithRedirects 上的断点在启动时被命中。以防万一,我也将 IISExpress 设置为 Production,它产生与 Proj_prod 相同的结果。
标签: asp.net-core asp.net-core-mvc .net-5 custom-error-pages