写点什么

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

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

关注

评论

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

技术干货|7个 React 性能提升技巧

拍乐云Pano

React

精选Hive高频面试题11道,附答案详细解析

五分钟学大数据

大数据 hive 5月日更

详解百度富媒体检索比对系统的关键技术

百度Geek说

大数据 后端 检索 #富媒体#

【欢乐叫地主流程】需求分析/用例设计+游戏测试工作流程/测试计划

程序员阿沐

软件测试 需求分析 测试用例 游戏测试 测试计划

微服务的灾难

Xargin

架构 微服务 microservice

Python监控打印机队列

IT蜗壳-Tango

IT蜗壳 IT蜗壳教学 5月日更

技术实践丨如何解决异步接口请求快慢不均导致的数据错误问题?

华为云开发者联盟

JavaScript typescript 大前端 浏览器 angular

一个朋友学会Java泛型后直接薪资翻倍!

北游学Java

Java 泛型

大数据实战:网站流量日志数据分析

大数据技术指南

大数据 5月日更

jmeter命令行执行测试并对测试报表进行初步分析

行者AI

测试 Jmeter

两年半,50W的offer,三本,普通前端如何打好自己的牌

月哥

面试

SICP 习题2.6之丘奇数

程序员历小冰

函数式编程 SICP 5月日更

腾讯T6大牛体系化带你学习Java面向对象,网友:这详解,太清晰了

牛哄哄的java大师

Java 面向对象 面向对象编程

5月,腾讯最新职级技术要求曝光,Linux炸了。

linux大本营

c++ Linux 后台开发 架构师 服务器开发

高德 Serverless 平台建设及实践

阿里巴巴云原生

Serverless 运维 云原生 监控 中间件

Python OOP-5

若尘

oop Python编程 5月日更

使用docker compose快速部署前后端分离项目案例

皮特王

nginx Docker Vue Docker-compose

腾讯云大神亲码“redis深度笔记”,从基础到源码,应有尽有

Java 编程 程序员 架构

整天用对象,你知道Java中对象的内存布局吗?

码农参上

Java JVM 签约计划第二季

打破思维定式(六)

Changing Lin

5月日更

自己动手丰衣足食——自定义下拉框vue组件

空城机

vue.js 大前端 vue cli 5月日更 编写组件

大部分两三年经验的程序员水平是怎样的?

Java架构师迁哥

网页视频下载教程(腾讯, B站, 优酷, 爱奇艺)

科技猫

经验分享 教程 视频处理 工具分享 网页视频下载

lowcode 和 nocode 没有穿衣服

Xargin

lowcode nocode

只会重装系统的运维,不是好运维

运维研习社

Linux 5月日更 系统修复

恍然大悟丨Java 中 RMI 的使用

Java架构师迁哥

工商银行分布式服务 C10K 场景解决方案

阿里巴巴云原生

容器 微服务 云原生 监控 应用服务中间件

XML 文件解析

xcbeyond

XML配置 5月日更

华为云PB级数据库GaussDB(for Redis)揭秘第九期:与HBase的对比

华为云开发者联盟

HBase 华为云 开源数据库 NoSQL数据库 数据库GaussDB(for Redis)

开发者必看,面试官心中的最佳数据库人才模型是什么样?

华为云开发者联盟

面试 开发者 华为云数据库 数据库人才

七面阿里险幸上岸,入职就是40*16K。网友:Java 面经交出来

Java 程序员 架构 面试 计算机

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