.NET 5.0 生产中的自定义错误页面
Custom Error Page in Production for .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");
}
}
然后转到 Error.cshtml,在 Shared.
中找到
这不会删除默认的 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"
}
}
首先检查您的路由是否正确,或者您是否被重定向到 /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}");
来发送请求参数,而不是路由
我了解你 运行 你的项目 IIS Express
。为此,您无法按预期找到您的自定义错误页面。您应该在 launchsettings.json
中的 profile
中使用 "ASPNETCORE_ENVIRONMENT": "Production"
,它可以解决您的问题。只需像下面这样更改您的代码。
//clarify
"profiles": {
"IIS Express": {
"commandName": "IISExpress",
"launchBrowser": true,
"environmentVariables": {
"ASPNETCORE_ENVIRONMENT": "Production" //add this
}
},
"Proj_prod": {
"commandName": "Project",
"launchBrowser": true,
"applicationUrl": "https://localhost:5001;http://localhost:5000",
"environmentVariables": {
"ASPNETCORE_ENVIRONMENT": "Development"
}
}
}
}
好的,有问题的实际代码按预期工作。工作伙伴 app.UseStatusCodePages();
很晚才在我没有注意到的 Configure 下添加。
(是的,花了 14 天。我终于回到了这里,才注意到。)
我正在尝试在我的 .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");
}
}
然后转到 Error.cshtml,在 Shared.
中找到这不会删除默认的 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"
}
}
首先检查您的路由是否正确,或者您是否被重定向到 /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}");
来发送请求参数,而不是路由
我了解你 运行 你的项目 IIS Express
。为此,您无法按预期找到您的自定义错误页面。您应该在 launchsettings.json
中的 profile
中使用 "ASPNETCORE_ENVIRONMENT": "Production"
,它可以解决您的问题。只需像下面这样更改您的代码。
//clarify
"profiles": {
"IIS Express": {
"commandName": "IISExpress",
"launchBrowser": true,
"environmentVariables": {
"ASPNETCORE_ENVIRONMENT": "Production" //add this
}
},
"Proj_prod": {
"commandName": "Project",
"launchBrowser": true,
"applicationUrl": "https://localhost:5001;http://localhost:5000",
"environmentVariables": {
"ASPNETCORE_ENVIRONMENT": "Development"
}
}
}
}
好的,有问题的实际代码按预期工作。工作伙伴 app.UseStatusCodePages();
很晚才在我没有注意到的 Configure 下添加。
(是的,花了 14 天。我终于回到了这里,才注意到。)