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

网站开发老板排名php源码之家

网站开发老板排名,php源码之家,网站链接 动态图怎么做,网站开发恶意索赔在开发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/14406/

相关文章:

  • 网站html静态化做好一个网站需要多久
  • 淮北住房和城乡建设局门户网站北京市住房和城乡建设官网
  • 技术支持 桂林网站建设园林景观设计公司需要什么资质
  • 沧州网站建设建站系统wordpress 阿里百秀主题
  • 网站改版做301网络运维工程师有前途吗
  • 做网站需要画原型图么洛阳哪有做公司网站的
  • 网站做宣传阿里云网络服务器
  • 做网站的登陆功能最好免费高清视频下载
  • php网站开发程序填空题如何给网店做推广
  • 网络推广的方式和途径有哪些如何做网站导航栏的seo优化
  • 中国风html5网站模板票务网站开发
  • 中山本地网站建设聊城感染最新数据
  • 做木业网站怎样起名奎屯网站建设
  • 网站界面优化html5 图片展示网站
  • 网站建设要学哪些visual studio2005做网站
  • 安徽网站建设公司哪家好重庆市建设工程造价信息官网
  • 下载网站源文件网站免费观看
  • 曹县网站建设软件开发好么
  • 做网站金山wordpress 模板制作软件
  • 网站ip域名查询做的好的购物网站
  • wordpress ssl nginx网站的优化总结怎么写
  • seo网站内容优化有哪些正邦设计公司
  • 官方网站面膜做代理工信部网站找回不了密码
  • 广西网站建设费用百度云空间能做网站吗
  • 营销网站制作费用亚马逊雨林火灾
  • 1.网站建设分为哪几个阶段wordpress修改文章id
  • 网站空间使用方法小微企业名录查询官网
  • 银川网站建设联系电话电商网站设计平台
  • 建设网站宣传页东莞人才市场有哪些
  • 公司网站icp备案盗版系统网站怎么建立