速来报名!AICon北京站鸿蒙专场~ 了解详情
写点什么

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

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

关注

评论

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

软件测试功能/数据库/linux/接口/自动化/测试开发面试真题解析

程序员阿沐

程序员 面试 软件测试 经验分享 测试工程师

Go进阶指南,手摸手带你深入了解 range 实现原理

微客鸟窝

Go 语言 8月日更

膜拜!首次公布Java10W字面经,Github访问量破百万

今晚早点睡

Java 程序员 计算机

PM2实用指南及容器Docker部署

devpoint

Docker Node 8月日更

架构实战营模块六作业-电商微服务架构

王晓宇

架构实战营

架构实战营模块6课后作业

hello

架构训练营

面试经历整理|持续四个月面试19家公司,收获8家offer,面试总结

编程susu

Java 编程 程序员 面试 计算机

架构训练营模块六作业

老实人Honey

架构训练营

电商系统拆分微服务

gawaine

架构师训练

深入了解RocketMQ之NameServer

邱学喆

KVConfigManager RouteInfoManager

我说想去京东面架构师,阿里表哥手甩我Java大厂技术题,让我滚蛋

Java~~~

Java spring 架构 面试 Spring Cloud

爱了!阿里巴巴内部出品“SpringBoot+微服务指南”,理论与实战

Java~~~

Java spring 架构 面试 微服务

字节跳动三面拿offer:网络+IO+redis+JVM+GC+红黑树+数据结构

编程susu

Java 编程 程序员 计算机 技术宅

消息队列Kafka:源码解读(一)-异步任务管理

正向成长

kafka源码 时钟轮 TimingWheel

阿里内部疯传的(Java知识面试指南项目),成功面试9家大厂Offer

Java~~~

Java spring 架构 面试 微服务

架构实战营 - 模块 6 - 电商系统的微服务拆分方案

雪中亮

架构实战营 #架构实战营

阿里P8熬了一个月肝出这份32W字Java面试手册,在Github标星31K+

编程susu

Java 编程 程序员 计算机 技术宅

模块6作业

SAKIN

模块一作业

南山先生

#架构实战营

难以置信!网易首席架构师竟用了500页笔记,把网络协议给趣谈了

Java~~~

Java 架构 面试 TCP 网络

【架构设计模块六】:拆分电商系统为微服务

Ryoma

架构实战营模块一

WolvesLeader

架构实战营

大数据0815作业

朱磊

秀出新天际的SpringBoot笔记,让开发像搭积木一样简单

Java~~~

Java spring 架构 面试 微服务

架构实战营模块六作业

maybe

Python代码阅读(第21篇):将变量名称转换为蛇式命名风格

Felix

Python 编程 Code Programing 阅读代码

集字节大神面试经验诚意出品:微服务(耀世版),助你向大厂迈进

Java~~~

Java 架构 面试 分布式 微服务

泪目!跳槽太不容易,蚂蚁金服三轮面试,四个小时灵魂拷问

Java~~~

Java spring 架构 面试 微服务

GitHub程序调优「黑马」!阿里大牛的Java性能优化实战笔记已上线

Java~~~

Java 架构 面试 JVM 性能调优

政府与市场应该如何互动

石云升

8月日更 财经思维

在字节奋战8年,今天回头一看只剩下这份1857页的算法笔记了

编程susu

Java 编程 程序员 计算机 技术宅

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