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

免费建设网站c3sales网站解析密码

免费建设网站c3sales,网站解析密码,网站开发岗位职责,做汽车网站费用在开发ASP.NET Core MVC应用程序时#xff0c;需要对控制器中的模型校验数据有效性#xff0c;元数据注释(Data Annotations)是一个完美的解决方案。元数据注释最典型例子是确保API的调用者提供了某个属性的值#xff0c;在传统的ASP.NET MVC中使用的是RequiredAttribute特性… 在开发ASP.NET Core MVC应用程序时需要对控制器中的模型校验数据有效性元数据注释(Data Annotations)是一个完美的解决方案。元数据注释最典型例子是确保API的调用者提供了某个属性的值在传统的ASP.NET MVC中使用的是RequiredAttribute特性类。该属性仍然可以在ASP.NET Core MVC中使用但也提供了一个新的特性类BindRequiredAttribute。今天让我们来看看它们之间的细微差别。RequiredAttribute的典型用法想象一下您的模型是下面的BookOrder类。为了强制Author和Title属性的值始终出现在传入的请求中,并且值不能为空我们使用RequiredAttribute修饰它们。    public class BookOrder{[Required]            public string Author { get; set; }[Required]            public string Title { get; set; }}这在传统的ASP.NET MVC中是很常见方法。有了这个您可以验证ModelState是否存在错误因为对这些属性的验证失败会反映在这里。示例    [Route(bookorder)]        public IActionResult PostBook([FromForm]BookOrder bookOrder)    {           if (!ModelState.IsValid){                return BadRequest(ModelState);}     // 正常逻辑代码return Content(OK);}如果传入的请求中缺少两个必需的属性或者属性的值为String.Empty则响应将是一个400状态码并将模型状态错误序列化到响应中。使用Postman进行测试请求中只提供了Title属性的值而未提供Author属性的值常有趣的问题例如当我们添加类似数量的属性时类型为int。在这种情况下RequiredAttribute将无法正常工作因为默认值为0并且该属性不可能为空。即使客户端在不包括属性值的情况下提交请求模型实例的值都将为0。换句话说RequiredAttribute不起作用。在我们的例子中我们使用的是int但是同样适用于所有值的类型例如DateTime或Guid。以前在传统的ASP.NET MVC中解决这个问题的方法是使用一个可为空类型如下所示    public class BookOrder{[Required]               public string Author { get; set; }[Required]              public string Title { get; set; }[Required]             public int? Quantity { get; set; }}虽然它解决了这个问题但是这不是最优雅的方式。Quantity属性不能为null如果API的调用者未提供该属性的值则该值保持为null配合RequiredAttribute特性可以达到我们的目的。这种方法的缺点是在正常逻辑代码中您需要直接访问可为空的Value属性。    [Route(bookorder)]        public IActionResult PostBook([FromForm]BookOrder bookOrder)    {           if (!ModelState.IsValid){                return BadRequest(ModelState);}     // 正常逻辑代码var requestedQuantity bookOrder.Quantity.Value;        return Content(OK);}如果通过静态分析工具来检查代码因为它们找不不到空值检测所以会警告您可能出现空引用异常即使在逻辑上ModelState检测是足够的。所以这并不是令人赏心悦目的方案。如果在VS中安装了Resharper工具会显示如下警告这就是BindRequiredAttribute产生的原因。它和RequiredAttribute的工作方式类似它要求请求必须提示属性的值 。我们将模型改为如下结构Quantity属性为int类型并使用[BindRequired]修饰    public class BookOrder{[Required]                  public string Author { get; set; }[Required]               public string Title { get; set; }[BindRequired]              public int Quantity { get; set; }}使用Postman进行测试在请求体不包括Quantity属性的值测试结果为ModelState.IsValid返回的false要求提供Quantity属性的值。RequiredAttribute与BindRequiredAttribute的差别BindRequiredAttribute特性类只要求API的调用者提供该属性的值但不进行空值检测允许提供的值为空例如我们将模型改为如下示例所有属性中都使用了BindRequiredAttribute特性类进行注释    public class BookOrder{[BindRequired]                   public string Author { get; set; }[BindRequired]                   public string Title { get; set; }[BindRequired]                   public int Quantity { get; set; }}使用Postman进行测试在请求体包括这三个属性名称的参数但是属性的值均为空或默认值测试结果为正常BindRequiredAttribute特性类只要求API的调用者提供该属性的值但不进行空值检测允许提供的值为空。RequiredAttribute 与 BindRequiredAttribute 混用问题当然在代码中混合使用[Required]和[BindRequired]并不是一个最令人满意的效果。值得庆幸的是ASP.NET Core MVC为您提供了足够的灵活性来改变RequiredAttribute的行为强制它包含BindRequiredAttribute的行为。您可以通过实现自己的IBindingMetadataProvider并在您的应用程序全局范围内注册来实现这一目标。    public class RequiredBindingMetadataProvider : IBindingMetadataProvider{           public void CreateBindingMetadata(BindingMetadataProviderContext context)  {                  if (context.PropertyAttributes?.OfTypeRequiredAttribute().Any() ?? false) {context.BindingMetadata.IsBindingRequired true;}}}在全局范围内注册它    public void ConfigureServices(IServiceCollection services)    {services.AddMvc(o {o.ModelMetadataDetailsProviders.Add(new RequiredBindingMetadataProvider());});}相关补充内容1、ASP.NET Core MVC还提供了BindNeverAttribute特性类用于指定该属性不进行模型绑定。例如您拥有一个像IsAdmin这样的属性这需要通过服务端来指定而不是通过客户提交的数据来指定2、如果客户端提交的是Json格式的数据BindRequiredAttribute与BindNeverAttribute特性类就不会起任何作用这是因为模型直接通过Json.Net反序列化来创建MVC框架并不知道属性的值从何而来。上面补充的两点感兴趣的同学可以自己进行测试。总结RequiredAttribute特性类的行为在传统的ASP.NET MVC与ASP.NET Core MVC是一致的校验属性的值不能为nullRequiredAttribute特性类对于值类型的属性就没有任何效果了所以在编码的过程将属性的类型改为可为空类型不过编码的过程就比较纠结了需要访问可为空类型的Value属性而且静态代码检测工具会警告需要进行非空的校验BindRequiredAttribute特性类可以解决值类型默认值的问题强制要求客户端提交请求时必须包含属性的值不过属性的值可以为空不进行非空的校验在RequiredAttribute与BindRequiredAttribute混合使用的情况下我们也提供了优雅的方法让RequiredAttribute包含BindRequiredAttribute的行为。原文地址: https://www.cnblogs.com/tdfblog/p/required-and-bindrequired-in-asp-net-core-mvc.html.NET社区新闻深度好文欢迎访问公众号文章汇总 http://www.csharpkit.com
http://www.yutouwan.com/news/98749/

相关文章:

  • 单位网站等级保护必须做吗智能小程序收款码
  • 企业培训惠州seo工作室
  • 嘉兴网站建设电话源代码开发网站
  • 网站模块图片尺寸暗红色网站
  • 网站后台管理界面html新零售平台软件系统
  • iis7添加网站网上做展板素材的网站
  • 株洲网站开发长春网站排名优化费用
  • 内蒙古手机网站制作wordpress上传图片代码
  • 服饰类行业_如果要建设网站_说明其建站流程.公司内部 网站开发
  • 网站建设行业努力都看不到效果万网网站购买
  • 网站底部设计代码东莞专业网站设计制作公司
  • 南昌集团网站建设上杭县建设局网站
  • 专业的传媒行业网站开发佛山网站建设招标
  • 网站开发H5网站后台如何添加视频
  • 睢宁建网站绥化市建设局官方网站
  • 电商网站需求分析软文推广怎么做
  • 简述如何对网站进行推广?h5模板素材
  • 网站美工做确认取消对话框酒店seo是什么意思
  • 网站开发下载功能如何实现陕西汽车网站建设
  • 台州铭企做的网站设计制作一个生态瓶
  • 南宁网站关键词推广如何查网站是哪家公司做的
  • 做垂直网站什么是网站的功能模块
  • 上传文件到网站根目录深圳建站公司优化
  • 佛山品牌网站建设培训前端网站开发
  • 网站建设设计技术方案模板下载app资源网站开发
  • 南通网站建设祥云南阳seo优化公司
  • 网站设计公司营销crm系统杭州江干区抖音seo哪里有
  • 网站制作公司重庆网站设计实施方案
  • 网站开发技术方法与路线推广链接点击器安卓版
  • 自开发购物网站湖南整合营销公司