aspnet core 全局模型验证,统一api响应
2021-01-30 07:13
标签:core factor ase string ESS pre build tar api 新建一个模型验证过滤器,其中ApiResp是自定义的统一响应类。 ApiResp大概长这样,响应code使用自定义的枚举,从000000到999999,有足够的空间满足不同类型的响应码。 在startup设置Mvc options 写一个SayHello接口测试一下,然而返回数据并不是ApiResp类型,仍然是默认的返回类型。貌似并没有执行自定义过滤器。 将Api控制器改为MVC控制器,取消[ApiController]特性,并将继承类由ControllerBase改为Controller。 查看一下Controller与ControllerBase的差别,Controller有继承ControllerBase和IActionFilter,ControllerBase是一个基类,没有任何继承类。 在startup设置ApiBehaviorOptions,启用自定义模型验证。 得到正确的响应类 这样设置,不需要额外的VldFilter。 aspnet core 全局模型验证,统一api响应 标签:core factor ase string ESS pre build tar api 原文地址:https://www.cnblogs.com/fallTakeMan/p/11668118.html上手就来
public class VldFilter:IActionFilter
{
///
public class ApiResp
{
public bool Success;
public string SysTime;
public string Code;
public string Message;
public object Data;
}
public void ConfigureServices(IServiceCollection services)
{
services.AddMvc(options =>
{
options.MaxModelValidationErrors = 5;
options.Filters.Add
正确姿势
public void ConfigureServices(IServiceCollection services)
{
services.AddMvc(options =>
{
options.MaxModelValidationErrors = 5;
options.Filters.Add
另一种正确姿势
public void ConfigureServices(IServiceCollection services)
{
services.AddMvc(options =>
{
options.MaxModelValidationErrors = 10;
//options.Filters.Add
//options.SuppressModelStateInvalidFilter = true; // 使用自定义模型验证
options.InvalidModelStateResponseFactory = (context) =>
{
ApiResp result = new ApiResp(ApiRespCode.F400000)
{
};
StringBuilder errTxt = new StringBuilder();
foreach (var item in context.ModelState.Values)
{
foreach (var error in item.Errors)
{
errTxt.Append(error.ErrorMessage + "|");
}
}
if (errTxt.Length > 0)
{
result.Message = errTxt.ToString().Substring(0, errTxt.Length - 1);
}
return new JsonResult(result);
};
});
}