如何解决.NET 5.0 生产中的自定义错误页面
我正在尝试在我的 .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"
}
}
解决方法
我了解您正在运行您的项目 IIS Express
。为此,您无法按预期找到自定义错误页面。您应该在 "ASPNETCORE_ENVIRONMENT": "Production"
的 profile
中使用 launchsettings.json
。它可以解决您的问题。只需更改您的代码,如下所示。
//clarify
"profiles": {
"IIS Express": {
"commandName": "IISExpress","launchBrowser": true,"environmentVariables": {
"ASPNETCORE_ENVIRONMENT": "Production" //add this
}
},"Proj_prod": {
"commandName": "Project","applicationUrl": "https://localhost:5001;http://localhost:5000","environmentVariables": {
"ASPNETCORE_ENVIRONMENT": "Development"
}
}
}
}
,
首先检查您的路由是否正确,或者您是否被重定向到 /Error/404
,然后您可以将用户重定向到自定义 404
[Route("/Error/{statusCode}")]
public IActionResult HttpStatusCodeHandler(int? statusCode)
{
switch(statusCode.Value)
{
case 404:
//ViewBag.ErrorMessage("Resource could not be found.");
//TempData["Message"] = "Resource could not be found."
return RedirectToAction("404");
break;
}
return View("Error");
}
PS:您也可以使用 app.UseStatusCodePagesWithReExecute("/Home/Error","?statusCode={0}");
来发送请求参数,而不是作为路由
好的,有问题的实际代码按预期工作。一位工作伙伴在我没有注意到的配置中添加了 app.UseStatusCodePages();
。
(是的,花了 14 天。我终于回到了这个,刚刚注意到。)
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。