写点什么

在 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:022242
用户头像

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

关注

评论

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

九章云极DataCanvas公司荣登“2023Venture50投资界数字科技”榜

九章云极DataCanvas

《计算机程序的构造和解释(原书第2版)》PDF

程序员李木子

SRP (Secure Remote Password Protocol)

Geek_44385e

srp

质量标准深度解读:覆盖度、bug等级、用户体验窥探

测吧(北京)科技有限公司

测试

测试过程管理揭秘:敏捷站会、项目时间、推动关键技巧

测吧(北京)科技有限公司

测试

语音合成技术在智能驾驶中的应用与挑战

数据堂

Casper Network加入Web3 领域 “Shark Tank” 的《Killer Whales》

股市老人

听GPT 讲Rust Cargo源代码(6)

fliter

需求管理智慧:与产品经理巧妙沟通解决不规范与变更频繁

测吧(北京)科技有限公司

测试

跨团队协作智慧:资源寻找、支持申请、协作分工

测吧(北京)科技有限公司

测试

布局算力新基建,九章云极DataCanvas公司赋能AI产业高质量发展

九章云极DataCanvas

思考-RBAC中对于权限编码部分的压缩处理(RoaringBitmap)

alexgaoyh

Java 位图 BitMap Roaringbitmap 位图压缩

听GPT 讲Rust Cargo源代码(5)

fliter

5G-A华彩开局,风流还看北京城

脑极体

通信

QT项目第一弹-自定义日志输出

springIce

日志 qt

软件测试/测试开发/全日制|MySQL安装最全教程

霍格沃兹测试开发学社

从需求到测试计划:项目流程与规范关键输入输出

测吧(北京)科技有限公司

测试

测试流程与规范指南:详解测试计划、用例与质量指标

测吧(北京)科技有限公司

测试

提高项目执行力:解析执行力差原因与提升方法

测吧(北京)科技有限公司

测试

Kickoff会议与测试关注点:项目启动的黄金法则

测吧(北京)科技有限公司

测试

ChatGPT 被曝泄露私密对话;美国 AI 企业一天蒸发 1.3 万亿市值丨 RTE 开发者日报 Vol.139

声网

DataCanvas会员中心正式上线,这些新春福利请接住!

九章云极DataCanvas

Pyth 预言机: 它们如何影响Hover?

股市老人

软件测试/测试开发/全日制|Pytest allure如何添加测试用例步骤

霍格沃兹测试开发学社

任务与责任划分:巧妙安排项目工作与任务

测吧(北京)科技有限公司

测试

软通动力启动鲲鹏原生应用开发合作

彭飞

九章云极DataCanvas公司入选《2023中国大模型产业创新服务商TOP30榜单》

九章云极DataCanvas

10000+AI绘画关键词-涵盖Mid和StableDiffusion

Geek_bbbdb0

深入理解 Java 变量类型、声明及应用

小万哥

Java 程序人生 编程语言 软件工程 后端开发

项目排期揭秘:预估测试时间与灵活沟通工期不合理

测吧(北京)科技有限公司

测试

恒安嘉新启动鲲鹏原生应用开发合作

彭飞

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