WebApi 全局异常与局部异常

全局异常过滤器

public class ApiExceptionFilter:ExceptionFilterAttribute
{
private IHostingEnvironment _env;
public ApiExceptionFilter(IHostingEnvironment env)
{
_env = env;
} public override void OnException(ExceptionContext context)
{
if (context.ExceptionHandled)
{
return;
} var exMsg = context.Exception.Message;
ApiResp resp = new ApiResp(ApiRespCode.E999999,exMsg);
// 开发环境显示异常信息
if(_env.IsDevelopment())
{
resp.Message = exMsg;
}
context.Result = new JsonResult(resp);
context.ExceptionHandled = true;
}
}

在startup添加这个异常过滤器

services.AddMvc(options=>
{
options.MaxModelValidationErrors = ;
// 自定义model验证
options.Filters.Add<VldFilter>();
// 异常捕获
options.Filters.Add<ApiExceptionFilter>();
}).SetCompatibilityVersion(CompatibilityVersion.Version_2_2);

在原来的api中写一个简单的测试方法。响应报文的默认构造函数中的message使用自定义的枚举扩展方法获取枚举的message属性,如果是开发环境,将这个message替换为异常信息,调试会比较方便。

[HttpGet]
public void test()
{
int a = ;
int c = / a;
}

WebApi 全局异常与局部异常

局部异常

当正常请求进来时,有些时候,我们的接口需要一些条件无法满足,这个时候可以手动抛出异常,因为封装了全局响应报文,这样不会影响系统使用。

public class ApiException:Exception
{
public ApiException() { } public ApiException(string message) : base(message) { } public ApiException(string message,Exception ex) : base(message, ex) { } public ApiException(ApiRespCode apiRespCode) : base(ApiEnum.GetMessage(apiRespCode)) { }
}

在需要地方就可以这样抛出异常:

throw new ApiException(ApiRespCode.E999999);
上一篇:HDU——2087剪花布条


下一篇:HDOJ/HDU 2087 剪花布条(indexOf()应用~~)