controller 手动抛出异常
using Microsoft.AspNetCore.Mvc;
using Microsoft.AspNetCore.Mvc.Filters;
using WebApplication3.Utility.Filter;
namespace WebApplication3.Controllers
{
public class ThirdController : Controller
{
[TypeFilter(typeof(CustomExceptionFilter))]
public IActionResult Index3()
{
throw new Exception("故意抛的");
}
}
}
创建异常处理类 CustomExceptionFilter
using Microsoft.AspNetCore.Mvc;
using Microsoft.AspNetCore.Mvc.Filters;
using Microsoft.AspNetCore.Mvc.ModelBinding;
using Microsoft.AspNetCore.Mvc.ViewFeatures;
using NuGet.Protocol.Plugins;
namespace WebApplication3.Utility.Filter
{
public class CustomExceptionFilter : Attribute, IExceptionFilter
{
private readonly IModelMetadataProvider model;
public CustomExceptionFilter(IModelMetadataProvider model) {
this.model = model;
}
public void OnException(ExceptionContext context)
{
Console.WriteLine("同步异常处理");
if (context.ExceptionHandled == false)
{
if (IsAjaxRequest(context.HttpContext.Request))
{
context.Result = new JsonResult(new
{
Success = false,
Message = context.Exception.Message,
});
}
else
{
ViewResult result = new ViewResult { ViewName = "~/Views/Shared/Error.cshtml" };
result.ViewData = new ViewDataDictionary(model, context.ModelState);
result.ViewData.Add("Exception", context.Exception);
context.Result = result;
}
context.ExceptionHandled = true;
}
}
private bool IsAjaxRequest(HttpRequest request)
{
string header = request.Headers["X-Requested-With"];
return "XMLHttpRequest".Equals(header);
}
}
}
异常页面 Error.cshtml
@model ErrorViewModel
@{
ViewData["Title"] = "Error";
Exception exception = ViewData["Exception"] as Exception;
}
<h1 class="text-danger">Error.</h1>
@if (exception != null)
{
<h3 class="text-danger">@exception.Message</h3>
}
页面展示
