写点什么

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

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

关注

评论

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

白手起家之注册中心zookeeper

卢卡多多

ZooKeeper原理 8月日更

手撸二叉树之根据二叉树创建字符串

HelloWorld杰少

数据结构与算法 8月日更

服务发现机制SPI居然是破坏者!

4ye

Java 源码 后端 sping 8月日更

缓存函数的简单使用

编程三昧

JavaScript 8月日更

Go字符串拼接最佳实践

Rayjun

Go 语言

【Vue2.x 源码学习】第四十二篇 - 组件部分 - 组件挂载流程简述

Brave

源码 vue2 8月日更

万企明道成立八周年,邀你书写留言!

明道云

人工智能下的音频还能这样玩!!!!

Python研究者

8月日更

博客升级之在线代码编辑器

devpoint

vscode 编辑器 8月日更

ndk-build 脚本

Changing Lin

8月日更

为什么要选择filecoin矿机挖矿?为什么不直接购买filecoin?

分布式存储 IPFS Filecoin fil挖矿 fil矿机

低品质的勤奋者

箭上有毒

8月日更

MySQL 系列教程之(十)索引原理:B+ 树与索引

若尘

MySQL 数据库 8月日更

从0开始的TypeScriptの十二:装饰器

空城机

JavaScript typescript 大前端 8月日更

程序员必备!5款小众高效的开发神器

Jackpop

你可能不知道的css动画性能

云小梦

CSS layout requestAnimationFrame 重排和重绘 will-change

Go,一文搞懂 string 实现原理

微客鸟窝

Go 语言 8月日更

iOS开发:开发过程中单例模式的使用

三掌柜

8月日更 8月

硬盘空间免费扩容了2TB!!!

Jackpop

☕【Java技术指南】「并发原理专题」AQS的技术体系之CLH、MCS锁的原理及实现

码界西柚

AQS 8月日更 MCS锁 CLH锁

腾讯良心了?!!!

Jackpop

先「干」,就对了

非著名程序员

个人成长 职场 认知提升 8月日更

帮小姐姐打分系统的模型创建,滚雪球学 Python 第三轮第 11 篇

梦想橡皮擦

8月日更

管道(Channel)的读取与写入「让我们一起Golang」

Regan Yue

协程 Go 语言 8月日更 管道

vue入门:router路由简介与使用

小鲍侃java

8月日更

【Flutter 专题】61 图解基本 Button 按钮小结 (一)

阿策小和尚

Flutter 小菜 0 基础学习 Flutter Android 小菜鸟 8月日更

elasticsearch7.13.4 ik中文分词器安装

Rubble

8月日更

Linux 虚拟文件系统(VFS)分析

赖猫

Linux 文件系统

架构训练营第 1 期 模块五作业

高远

仿TP钱包开发,去中心化钱包源码开发

在线HTML5,CSS3,VueJS,jQuery运行测试练习工具

入门小站

工具

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