好友化异常处理
很多时候,我们抛给前端的异常信息是非常不好友的,从而导致客户的反感与不满。如果在发生异常时,前端仅仅接收到类似 “系统出现了异常,请联系系统管理员。” 之类的提示就不一样了。
Fireasy MVC 里的友好化处理是通过 ActionFilter
实现的。
在 Asp.Net MVC
里,你需要往 FilterConfig 类里添加 HandleErrorAttribute
过滤器。如下所示:
namespace demo
{
public class FilterConfig
{
public static void RegisterGlobalFilters(GlobalFilterCollection filters)
{
filters.Add(new AuthorizeAttribute());
filters.Add(new Fireasy.Web.Mvc.HandleErrorAttribute());
}
}
}
而在 Asp.Net Core MVC
中,你需要在 Startup.ConfigureServices 方法里使用 ConfigureFireasyMvc 方法,由 UseErrorHandleFilter 来切换启用或禁用:
namespace demo
{
public class Startup
{
public Startup(IConfiguration configuration)
{
Configuration = configuration;
}
public IConfiguration Configuration { get; }
// This method gets called by the runtime. Use this method to add services to the container.
public void ConfigureServices(IServiceCollection services)
{
services.AddFireasy(Configuration).AddIoc();
#if NETCOREAPP3_1
services.AddControllersWithViews()
.ConfigureFireasyMvc(options =>
{
options.UseErrorHandleFilter = true; //默认是开启的
});
#else
services.AddMvc()
.ConfigureFireasyMvc(options =>
{
options.UseErrorHandleFilter = true; //默认是开启的
});
#endif
//或是直接采用以下的方法添加过滤器
services.Configure<MvcOptions>(s =>
{
s.Filters.Add(new Fireasy.Web.Mvc.HandleErrorAttribute());
});
}
}
}
在适当的地方抛出 ClientNotificationException
异常类返回,前端将接收一个 Result 结果的对象,msg 即为异常的 Message。如果是非 ClientNotificationException
类型的异常,则会使用 日志组件 记录详细的异常,并返回好友的 Result 到前端。
对于返回数组或列表的 Action,如果抛出 Result 则会影响到前端的解析,因此可以使用 EmptyArrayResultAttribute
进行标记,以便在发生异常时,返回一个空数组。如下所示:
public class HomeController : Controller
{
[EmptyArrayResult(true)] //返回空数组
//[EmptyArrayResult("暂未实现")] //返回 Result 结构,显示信息 暂未实现
public IActionResult GetList()
{
throw new NotImplementedException();
}
}