千家信息网

如何分析WebApiClient的接口输入验证

发表于:2026-11-01 作者:千家信息网编辑
千家信息网最后更新 2026年11月01日,本篇文章给大家分享的是有关如何分析WebApiClient的接口输入验证,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。1. 文章目的随着
千家信息网最后更新 2026年11月01日如何分析WebApiClient的接口输入验证

本篇文章给大家分享的是有关如何分析WebApiClient的接口输入验证,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。

1. 文章目的

随着WebApiClient的不断完善,越来越多开发者选择WebApiClient替换原生的HttpClient,下面将介绍WebApiClient的接口参数输入有效性验证的新特性。

2.DataAnnotations介绍

在asp.net mvc服务端编程中,我们在创建模型的时候,使用System.ComponentModel.DataAnnotations相关的验证特性,配合mvc框架,可以做前端和后端双向输入验证的效果。

public class UserInfo{ [Required] [StringLength(10, MinimumLength = 1)]

public string Account { get; set; } [Required] [StringLength(10, MinimumLength = 6)]

public string Password { get; set; } }

以上的Required就是验证特性,asp.net mvc在模型绑定的时候,会进行验证一遍,验证结果放在控制器的ModelState属性里面。当然System.ComponentModel.DataAnnotations并不是asp.net mvc特有的,而是基础库自带的,也就是说任何框架下都是可以使用的。

3. 接口参数值的输入验证

Validator静态类提ValidateObject相关的方法,用于验证实例和实例的属性值,WebApiClient使用Validator类来完成接口方法的参数值输入验证:

///

/// 提供参数值和参数的属性值输入合法性验证

///

static class ParameterValidator

{

///

/// 类型的属性否需要验证缓存

///

private static readonly ConcurrentCache cache = new ConcurrentCache();

///

/// 返回是否需要进行属性验证

///

/// 实例

///

private static bool IsNeedValidateProperty(object instance)

{

if (instance == null)

{

return false;

}

var type = instance.GetType();

if (type == typeof(string) || type.GetTypeInfo().IsValueType == true)

{

return false;

}

return cache.GetOrAdd(type, t => t.GetProperties().Any(p => p.CanRead && p.IsDefined(typeof(ValidationAttribute), true)));

}

///

/// 验证参数值输入合法性

/// 验证参数的属性值输入合法性

///

/// 参数描述

/// 是否验证属性值

///

public static void Validate(ApiParameterDescriptor parameter, bool validateProperty)

{

var name = parameter.Name;

var instance = parameter.Value;

foreach (var validation in parameter.ValidationAttributes)

{

validation.Validate(instance, name);

}

if (validateProperty == true && IsNeedValidateProperty(instance) == true)

{

var ctx = new ValidationContext(instance) { MemberName = name };

Validator.ValidateObject(instance, ctx, true);

}

}

}

4.接口参数的DataAnnotations声明

4.1 声明参数值的验证

例如GetByIdAsync方法有个id的参数,服务器要求必填且最大长度为10的字符串,我们可以使用Required, StringLength(10)特性修饰id这个参数,在接口调用时,WebApiClient会对id值进行验证,如果不通过则抛出ValidationException的异常。

// /GET webapi/user/GetById?id=id001// Return HttpResponseMessage[HttpGet("webapi/user/GetById/{id}")][BasicAuth("userName", "password")]ITask GetByIdAsync(    [Required, StringLength(10)] string id);

4.2 声明参数值的属性验证

对于自定义的模型类型,只要在属性里声明了相关的DataAnnotations,WebApiClient就自动进行属性的输入验证。

public class UserInfo

{

[Required]

[StringLength(10, MinimumLength = 1)]

public string Account { get; set; }

[Required]

[StringLength(10, MinimumLength = 6)]

public string Password { get; set; }

}

// POST webapi/user/UpdateWithJson

// Body {"Account":"laojiu","Password":"123456"}

// Return json或xml内容

[HttpPost("webapi/user/UpdateWithJson")]

ITask UpdateWithJsonAsync(

[JsonContent("yyyy-MM-dd HH:mm:ss")] UserInfo user);

当user参数不为null的情况,就会验证它的Account和Password两个属性。

4.3 声明参数值、参数的属性值同时验证

对于4.2的例子,如果我们希望user参数值也不能为null,可以如下声明方法:

// POST webapi/user/UpdateWithJson// Body {"Account":"laojiu","Password":"123456"}// Return json或xml内容[HttpPost("webapi/user/UpdateWithJson")]ITask UpdateWithJsonAsync(    [Required][JsonContent("yyyy-MM-dd HH:mm:ss")] UserInfo user);

5. 禁用参数的属性验证

如果你的模型的属性已声明验证特性,但不希望WebApiClient进行属性值验证,可以在创建接口实例的时候,在配置项里禁用属性验证:

var config = new HttpApiConfig{    UseParameterPropertyValidate = false};var client = HttpApiClient.Create(config);

以上就是如何分析WebApiClient的接口输入验证,小编相信有部分知识点可能是我们日常工作会见到或用到的。希望你能通过这篇文章学到更多知识。更多详情敬请关注行业资讯频道。

验证 参数 属性 输入 接口 特性 实例 方法 模型 合法 合法性 时候 分析 内容 就是 文章 更多 框架 知识 篇文章 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 湖南永感互联网科技有限公司 互联网科技公司的优势 科技股互联网 疫情对互联网科技公司影响 互联网科技未来 互联网络科技有限公司 天扬科技互联网广告 四个字互联网科技公司取名 华脉科技工业互联网产品 金融科技与互联网金融相同和不同 互联网对科技的发展 重庆互联网医院沙龙医盟信息科技 中国互联网十大科技股排名 伊宁互联网科技做什么的 南通创西澳互联网科技有限公司 扫呗互联网科技有限公司 广州梦谷互联网科技有限公司领导 普陀区互联网教育科技管理办法 张家口科技产业互联网平台 现代互联网科技公司 互联网科技股 中智农互联网科技 深圳九邦互联网科技有限公司 互联网科技排名 互联网金融中的现代科技 速维有品互联网信息科技(苏州)有限公司 启辰互联网科技 北京互联网科技类企业分布 互联网领先科技成果宣传视频 平安好医生打造互联网科技医疗
0