写点什么

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

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

关注

评论

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

执子之手,与子长安:探秘华为运动健康实验室

脑极体

生产环境全链路压测建设历程 19:某快递 A 股上市公司的生产压测案例之下篇

数列科技杨德华

全链路压测 七日更

花火交易所系统开发|花火交易所软件APP开发

系统开发

云原生应用开发框架Quarkus介绍

gaolk

云原生 Quarkus

第六周技术选型作业-CAP原理概述

Geek_michael

极客大学架构师训练营

合约交易系统开发软件定制

平安社区平台解决方案,智慧社区管理服务平台搭建

13530558032

iOS面试基础知识 (五)

iOSer

ios 面试 底层知识

盘点2020 | 所思、所遇、所学、所悟

三钻

程序员 大前端 盘点2020

便民服务多元化,智慧平安小区安防智能化建设

t13823115967

智慧城市

支持百万级TPS,Kafka是怎么做到的?

爱笑的架构师

kafka Kafka知识点 零拷贝 Mmap 七日更

甲方日常 74

句子

工作 随笔杂谈 日常

数字之暖:鹅厂云原生的“新路”与“历承”

脑极体

Docker终端无法输入中文问题解决

Simon

Docker 七日更

金瓯无缺江河一统|Win10系统基于Docker和Python3搭建并维护统一认证系统OpenLdap

刘悦的技术博客

Python TCP ldap openldap 统一管理

微警务平台搭建,智慧警务系统开发解决方案

t13823115967

智慧警务系统开发 微警务

永续合约交易系统开发模式定制

MySQL用户与权限管理指南

Simon

MySQL 用户权限 七日更

简析5G时代的MART流处理

VoltDB

数据库 5G

Native 与 JS 的双向通信

Minar Kotonoha

甲方日常 73

句子

工作 随笔杂谈 日常

新思科技:2021年软件安全行业六大趋势预测

InfoQ_434670063458

Javascript | 模拟mvc实现点餐程序

LiOnTalKING

Java mvc 大前端 H5

区块链商品溯源解决方案,区块链全程追溯系统

13530558032

规划算法

田维常

算法

浅谈数据仓库质量管理规范

数据社

数据仓库 数据质量管理 七日更

什么样的企业才需要用到云服务器?

德胜网络-阳

90%的程序员,都没用过多线程和锁,怎么成为架构师?

小傅哥

程序员 小傅哥 线程池 架构师 七日更

week5 conclusion 分布式缓存架构+消息队列

J

极客大学架构师训练营

25道mybatis面试题,不要说你不会

田维常

mybatis

函数进阶· 第3篇《常用内置函数filter()、map()、zip(),怎么用的呢?》

清菡软件测试

测试开发

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