当前位置: 首页 > news >正文

孔家庄网站建设公司网站建设方案

孔家庄网站建设,公司网站建设方案,个人可以做网站导航,小果seo实战培训课程这个代码片段定义了一个自定义的 ASP.NET Core 过滤器(GuardModelStateAttribute),用于在控制器动作执行之前验证模型状态(ModelState)。如果模型状态无效,则构造一个 ProblemDetails 对象来描述错误&#…

这个代码片段定义了一个自定义的 ASP.NET Core 过滤器(GuardModelStateAttribute),用于在控制器动作执行之前验证模型状态(ModelState)。如果模型状态无效,则构造一个 ProblemDetails 对象来描述错误,并返回一个 BadRequest 响应。

代码片段:

/// <summary>
/// 验证 ModelState 是否有效
/// </summary>
public class GuardModelStateAttribute : ActionFilterAttribute
{// <summary>/// 在执行操作之前进行验证。/// 如果模型状态无效,则返回 BadRequest 响应。/// </summary>/// <param name="context">Action 执行上下文</param>public override void OnActionExecuting(ActionExecutingContext context){// 验证 ModelState 是否有效if (!context.ModelState.IsValid){// 构造 ProblemDetails 对象来构建错误响应var problemDetails = new ProblemDetails{Title = "Bad Request",                          // 错误标题Detail = "参数验证失败,请检查输入参数",           // 错误详情Status = (int)HttpStatusCode.BadRequest,        // HTTP 状态码Instance = context.HttpContext.Request.Path,    // 请求路径};// 遍历 ModelState 字典,将错误信息添加到 Extensions 字典中foreach (var key in context.ModelState.Keys){// 获取每个键对应的错误信息var errors = context.ModelState[key]?.Errors;// 如果没有错误信息,则跳过if (errors is not { Count: > 0 }) continue;// 遍历每个错误,并将其添加到 ProblemDetails 的 Extensions 字典中foreach (var error in errors){problemDetails.Extensions.Add(key, error.ErrorMessage);}}// 设置响应结果context.Result = new BadRequestObjectResult(problemDetails);}}
}

代码解读

  1. 类定义

    public class GuardModelStateAttribute : ActionFilterAttribute
    
    • GuardModelStateAttribute 继承自 ActionFilterAttribute,这是一个内置的过滤器接口,用于在执行控制器动作前后执行一些逻辑。
  2. 覆盖 OnActionExecuting 方法

    public override void OnActionExecuting(ActionExecutingContext context)
    
    • OnActionExecuting 方法是在控制器动作执行之前调用的。覆盖这个方法可以让我们在动作执行前做一些预处理工作。
  3. 验证模型状态

    if (!context.ModelState.IsValid)
    
    • ModelState.IsValid 是一个布尔属性,表示模型状态是否有效。如果为 false,表示模型状态无效,即请求中的数据未通过验证。
  4. 构造 ProblemDetails 对象

    var problemDetails = new ProblemDetails
    {Title = "Bad Request",Detail = "参数验证失败,请检查输入参数",Status = (int)HttpStatusCode.BadRequest,Instance = context.HttpContext.Request.Path,
    };
    
    • ProblemDetails 是一个标准的对象,用于描述 HTTP 错误响应。这里设置了错误标题、详细信息、HTTP 状态码(400 Bad Request)以及请求的路径。
  5. 收集并附加错误信息

    foreach (var key in context.ModelState.Keys)
    {var errors = context.ModelState[key]?.Errors;if (errors is not { Count: > 0 }) continue;foreach (var error in errors){problemDetails.Extensions.Add(key, error.ErrorMessage);}
    }
    
    • 遍历 ModelState 中的所有键值对,获取每个字段的验证错误信息,并将这些错误信息添加到 ProblemDetailsExtensions 字典中。
  6. 设置响应结果

    context.Result = new BadRequestObjectResult(problemDetails);
    
    • 设置 ActionExecutingContextResult 属性,返回一个包含 ProblemDetailsBadRequestObjectResult,这将导致控制器不再继续执行,并返回一个带有错误信息的 HTTP 响应。

作用

这个自定义过滤器的作用是:

  • 验证模型状态:在控制器动作执行之前验证请求中的数据是否满足验证规则。
  • 返回错误响应:如果数据验证失败,则构造一个包含详细错误信息的 ProblemDetails 对象,并返回一个 BadRequest 响应。
  • 简化错误处理:通过在过滤器中集中处理模型状态验证,可以减少在每个控制器动作中重复编写类似的错误处理逻辑。

使用方法

// Add services to the container.
#region 向容器中添加服务// 关闭默认模型验证过滤器
builder.Services.Configure<ApiBehaviorOptions>(options => options.SuppressModelStateInvalidFilter = true);builder.Services.AddControllers(options =>
{// 添加过滤器options.Filters.Add<GuardModelStateAttribute>();
})
.AddNewtonsoftJson(options =>
{options.SerializerSettings.DateFormatString = "yyyy-MM-dd HH:mm:ss"; //格式化时间
});#endregion

要在控制器中使用这个过滤器,可以在控制器或动作方法上添加 [GuardModelState] 属性:

[ApiController]
[Route("[controller]")]
[GuardModelState] // 在控制器级别应用过滤器
public class MyController : ControllerBase
{[HttpGet("{id}")]public ActionResult Get(int id){// 控制器逻辑return Ok();}[HttpPost][GuardModelState] // 在动作方法级别应用过滤器public ActionResult Post([FromBody] MyModel model){// 控制器逻辑return Ok();}
}

总结

GuardModelStateAttribute 是一个自定义的 ASP.NET Core 过滤器,用于在控制器动作执行前验证模型状态,并在模型状态无效时返回一个带有详细错误信息的 BadRequest 响应。通过使用这个过滤器,可以简化错误处理逻辑,并提高代码的可维护性和可读性。

http://www.hkea.cn/news/414205/

相关文章:

  • 东莞常平做网站公司app营销策划方案
  • 爱用建站 小程序重庆网站制作公司
  • 网站建设小企业案例漯河网络推广哪家好
  • wordpress 清空回收站合肥网站优化软件
  • 电站建设招聘网站智推教育seo课程
  • 做静态网站选用什么服务器站长素材网站
  • 网站建设先做前台还是后台百度认证是什么
  • 广州专业做crm系统的供应商seo网站培训班
  • 景安建网站企业网站seo方案案例
  • 山东滕州疫情最新消息今天i长沙官网seo
  • 公司做网站买域名之后做什么百度一下你就知道手机版
  • 北京婚恋网站哪家最好企业推广宣传方式
  • 国发网站建设西安做网站公司
  • 网站推广服务合同简述网络营销的主要方法
  • 信息门户网站是什么成人计算机培训机构哪个最好
  • 网站建设公司 中企动力公司东莞商城网站建设
  • b2c的电子商务网站自己想做个网站怎么做
  • 京东pc网站用什么做的如何注册网站怎么注册
  • 长沙商城网站制作seo线下培训课程
  • web网站开发公司网站制作优化排名
  • 这么做3d网站企业邮箱网页版
  • 瑞安网站建设公司关键词排名网络推广
  • 南京学做网站友情链接检查工具
  • 参考文献网站开发百度重庆营销中心
  • 如何做微信ppt模板下载网站企业网页设计公司
  • 做b2b网站百度点击快速排名
  • 网站怎么做移动图片不显示不出来吗芭嘞seo
  • 旅游网站建设服务器ip域名解析
  • 企业网站建设三个原则百度指数资讯指数是指什么
  • 房地产集团网站建设方案软文文案案例