写点什么

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

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

关注

评论

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

web前端培训开发者要掌握的CSS 技巧有哪些

@零度

CSS 前端开发

盘点:阿里云上8款免费的开发者工具

阿里云云效

阿里云 开发者 云原生 开发者工具 研发工具

ETL调度软件TASKCTL核心调度节点安装

敏捷调度TASKCTL

kettle 调度引擎 ETL 任务队列 调度任务

怒肝 JavaScript 数据结构 — 栈篇(三)

杨成功

数据结构 4月月更

三高Mysql - 搭建“三高”架构之复制

懒时小窝

MySQL MySQL 高可用

netty系列之:netty中的自动解码器ReplayingDecoder

程序那些事

Java Netty 程序那些事 4月月更

杭州等保测评公司有哪些?分别叫什么?如何能查到?

行云管家

等保 等级保护 等保测评 杭州

面试官:Redis的事务满足原子性吗?

码农参上

redis 事务 4月月更

H5营销有什么优势?企业需要定制开发H5吗?

源字节1号

前端开发 后端开发 H5制作

三高Mysql - 搭建“三高”架构之扩展与切换

懒时小窝

MySQL MySQL 高可用

多个角度论证SeekTiger 生态核心STI的魅力

西柚子

敲重点!这些更新将会影响HarmonyOS原子化服务上架

HarmonyOS开发者

HarmonyOS 原子化服务

CPUvsGPU:谁才是游戏和视频编辑的核心?

Finovy Cloud

人工智能 gpu cpu

无需编程,基于微软mssql数据库零代码生成CRUD增删改查RESTful API接口

crudapi

低代码 API crud crudapi 增删改查

@所有高校师生,2022全国大学生物联网设计竞赛火热开启,限量礼品等你来拿!

HarmonyOS开发者

HarmonyOS 物联网设计竞赛

为什么做开源需要懂异步协作?

腾源会

开源 腾源会

模块八作业:设计消息队列存储消息数据的 MySQL 表格

王大胖

平安普惠荆州分公司:警民齐心,共同抗疫

科技新消息

crontab命令详细介绍教程,快来围观

CRMEB

不再单调!快来自定义你的专属背景~

优麒麟

Linux 开源 操作系统 优麒麟 用户登录

如何禁用XXE处理?

龙智—DevSecOps解决方案

漏洞扫描 代码安全 漏洞检测

PHP项目微信提现功能代码详解

CRMEB

java培训关闭流方法有顺序吗

@零度

JAVA开发 包装流

云效研发效能度量体系,如何展示和解读交付效能数据

阿里云云效

阿里云 运维 研发管理 研发效能 研发团队

Android C++系列:JNI常见问题

轻口味

c++ android 4月月更

逃离过度努力陷阱

FunTester

FunTester 湛卢 轻松主义

jackson学习之六:常用类注解

程序员欣宸

4月月更

RDP是什么意思?有什么用?

行云管家

运维 网络协议 RDP

消息队列存储消息数据的MySQL表格设计

Geek_36cc7c

直播预告|年营业额百亿的企业都在如何做数字化转型

云智慧AIOps社区

数字化转型 AIOPS 解决方案 智能运维

大数据培训spark SQL中count(*)和count(1)源码分析

@零度

大数据开发 spark SQL

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