写点什么

在 ASP.NET Web API OData 中利用 Queryable API 进行验证

  • 2013-02-28
  • 本文字数:855 字

    阅读完需:约 3 分钟

ASP.NET Web API OData 中,可以利用 Queryable API 为特殊操作启用 OData 查询语法。如下所示:

[Queryable]
public IQueryable Get(int projectId)

然而,如果要向组织外部公开可查询的操作,可以利用查询验证添加一个保护层以保护我们的服务。微软的程序经理 Hongmei Ge 近日介绍了几种在 Queryable API 中添加验证的场景。

Hongmei 指出的第一个场景是,使用 AllowedQueryOptions 属性,只允许包含 $top 和 $skip 的查询。如下所示:

[Queryable(AllowedQueryOptions = AllowedQueryOptions.Skip | AllowedQueryOptions.Top)]
public IQueryable Get(int projectId)

还可以使用 MaxTop 和 MaxSkip 属性将 $top 和 $skip 的最大值限制在 100 和 200:

[Queryable(MaxTop = 100)]
public IQueryable Get(int projectId)

[Queryable(MaxSkip = 200)]
public IQueryable Get(int projectId)

利用 AllowedOrderByProperties,可以将结果按 Id 属性排序,因为按其他属性排序可能会很慢:

[Queryable(AllowedOrderByProperties = “Id”)]
public IQueryable Get(int projectId)

如果允许客户端在 $filter 内使用相等比较,应该使用 AllowedLogicalOperators 对其进行验证:

[Queryable(AllowedLogicalOperators = AllowedLogicalOperators.Equal)]
public IQueryable Get(int projectId)

将 AllowedArithmeticOperators 设置为 None,就可以关闭 $filter 中的算术操作:

[Queryable(AllowedArithmeticOperators = AllowedArithmeticOperators.None)]
public IQueryable Get(int projectId)

你还可以使用 AllowedFunctions 属性来限制 $filter 中的函数使用:

[Queryable(AllowedFunctions = AllowedFunctions.StartsWith)]
public IQueryable Get(int projectId)

上面的代码意味着只能在 $filter 中使用 StartsWith 函数。

Hongmei 还演示了高级场景中的查询验证,如为 $skip、$top、$orderby、$filter 自定义默认验证逻辑,以及使用 ODataQueryOptions 来验证查询。

查看英文原文 Applying Validation for Queryable API in ASP.NET Web API OData

2013-02-28 02:022090
用户头像

发布了 59 篇内容, 共 24.1 次阅读, 收获喜欢 3 次。

关注

评论

发布
暂无评论
发现更多内容

TDesign React Starter 发布

TDesign

产品升级|1-2月合刊:多款重磅产品来袭

百度大脑

【愚公系列】2022年03月 Docker容器 Kafka集群的搭建

愚公搬代码

3月月更

恒源云(GpuShare)_租卡怎么选?看这一篇就够了!

恒源云

人工智能 GPU服务器

企业如何挖掘知识“金矿”?这本白皮书讲得够透彻!

百度大脑

治理有精度,AI赋智加强城市精细化管理

百度大脑

自动化知识图谱表示:从三元组到子图

第四范式开发者社区

人工智能 自动化 知识图谱

无监控不运维—浅述各种监控方案使用场景

穿过生命散发芬芳

3月月更

你的“数学潜意识”原来可以被唤醒!

博文视点Broadview

什么是数据恢复?数据丢失的最常见原因有哪些?

Ethereal

Java AOT之GraalVM native image介绍以及简单长连接服务实践

BUG侦探

GraalVM java aot native image

弱监督语义分割:从图像级标注快进到像素级预测

网易云信

安全

Nginx限速模块初探

喀拉峻

nginx

从建好到用好,阿里云原生微服务生态的演进

阿里巴巴云原生

提升客户服务体验的技巧

小炮

客户服务 SaaS平台

浅谈信息熵在数字体验监控领域的应用

博睿数据

详细的网站定制步骤有哪些?

源字节1号

网站开发 软件定制

Apache ShardingSphere 5.1.0 执行引擎性能优化揭秘

SphereEx

数据库 ShardingSphere SphereEx apache 社区

Go 中的空白标识符(下划线)

宇宙之一粟

Go 语言 3月月更

手把手教你从Apk中取出算法

奋飞安全

android 安全 java

windows下C与C++执行cmd命令并实时获取输出

DS小龙哥

3月月更

客户画像赋能百度推广生态实践

百度Geek说

前端 后端

Kubernetes中API的不同版本, Alpha, Beta, Stable 都是什么?

工程师薛昭君

Kubernetes API

从0到1落地电商小程序之微服务设计

晨亮

「架构实战营」

延期通知 RocketMQ Summit 议题全揭秘

阿里巴巴云原生

国家产业政策不断加码,氢能步入加速发展期

易观分析

氢能源 氢能源产业

错误码设计思考

木小风

Java 架构 错误码

AI+遥感智能解译,赋能智慧城市规划革新

百度大脑

地狱开局的2022,穿好你的安全铠甲

脑极体

网络安全入门5天速成教程: WEB安全渗透攻防技术

网络安全学海

网络安全 安全 信息安全 渗透测试 WEB安全

Python 的排序方法 sort 和 sorted 的区别

AlwaysBeta

Python

在ASP.NET Web API OData中利用Queryable API进行验证_语言 & 开发_Anand Narayanaswamy_InfoQ精选文章