在ASP.NET Core中,处理全局异常并显示友好的异常消息是一个常见的需求。以下是实现这一功能的基础概念和相关步骤:
首先,创建一个视图来显示错误消息。例如,在Views/Shared
文件夹下创建一个名为Error.cshtml
的文件:
<!-- Views/Shared/Error.cshtml -->
<!DOCTYPE html>
<html>
<head>
<title>Error</title>
</head>
<body>
<h1>Oops! Something went wrong.</h1>
<p>@ViewData["ErrorMessage"]</p>
</body>
</html>
在Startup.cs
文件中配置异常处理中间件。确保在Configure
方法中添加以下代码:
public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
if (env.IsDevelopment())
{
app.UseDeveloperExceptionPage();
}
else
{
app.UseExceptionHandler("/Home/Error");
app.UseHsts();
}
app.UseHttpsRedirection();
app.UseStaticFiles();
app.UseRouting();
app.UseAuthorization();
app.UseEndpoints(endpoints =>
{
endpoints.MapControllerRoute(
name: "default",
pattern: "{controller=Home}/{action=Index}/{id?}");
});
}
在HomeController
中添加一个Error
方法来处理异常并传递错误消息:
public class HomeController : Controller
{
public IActionResult Index()
{
return View();
}
[ResponseCache(Duration = 0, Location = ResponseCacheLocation.None, NoStore = true)]
public IActionResult Error(string errorMessage = null)
{
ViewData["ErrorMessage"] = errorMessage ?? "An unexpected error occurred.";
return View();
}
}
在Startup.cs
的Configure
方法中,使用UseExceptionHandler
中间件捕获异常并传递错误消息:
app.UseExceptionHandler("/Home/Error/{statusCode?}");
app.UseStatusCodePagesWithReExecute("/Home/Error/{0}");
app.Use(async (context, next) =>
{
try
{
await next();
}
catch (Exception ex)
{
context.Response.Redirect($"/Home/Error?errorMessage={ex.Message}");
}
});
通过以上步骤,你可以在ASP.NET Core应用程序中实现全局异常处理并显示友好的错误消息。
领取专属 10元无门槛券
手把手带您无忧上云