写点什么

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

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

关注

评论

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

12道Android高级面试题:android项目开发实战入门百度网盘

android 程序员 移动开发

厉害了,java入门电子书百度网盘下载,Java中高级面试

Java 程序员 后端

反向代理、负载均衡实战,【深度思考

Java 程序员 后端

只需一篇文章吃透Java多线程技术,内容非常全面

Java 程序员 后端

【免费报名】与阿里云一同探索视频云的新技术与新场景

阿里云CloudImagine

阿里云 音视频 视频编码 视频编解码 视频云

人力资源管理系统和oa的区别?

优秀

低代码

华为大神花费5个月打造的这份714页学习笔记系列,面试看这个就够了

Java 程序员 后端

声纹识别帮你守住钱袋子,聊一聊证券行业里的人工智能

Zilliz

AI 向量检索 Milvus 向量

QCon复盘之《58 集团反爬系统建设之路》

IT蜗壳-Tango

Qcon 10月月更

河北联通全光智慧专线,构筑更智运营新体验

十年Java编程开发生涯,未来教育计算机二级java激活码,面试官突击一问

Java 程序员 后端

原来SqlSession只是个甩手掌柜,Redis有几种数据类型

Java 程序员 后端

100%好评,扔物线学堂

android 程序员 移动开发

厉害了!java使用教程视频,我的Java春季历程

Java 程序员 后端

只需一篇文章吃透Java多线程技术,那些BAT大厂的Java面试官到底在想些什么

Java 程序员 后端

我有一台服务器,能干啥?

程序员鱼皮

程序员 IT 代码 计算机 java

1307页阿里Android面试全套真题解析在互联网火了,附赠复习资料

android 移动开发

只用了几百行代码写的百度搜索引擎,程序员Javaweb源码

Java 程序员 后端

史上最全的Java面试题集锦,高级Java工程师面试技术

Java 程序员 后端

DevOps 时代的高效测试之路

CODING DevOps

DevOps 团队 自动化测试 持续交付

使用 Spring Boot 进行单元测试

码语者

Java Spring Boot Unit Test

12道Android高级面试题:android开发视频百度网盘

android 程序员 移动开发

华为财经2021春招面试,尚硅谷springboot笔记,最全Java知识总结

Java 程序员 后端

10年阿里开发架构师经验分享:享学课堂架构师vip百度云

android 程序员 移动开发

华为Java面试题及答案,java开发实例教程课后答案石磊,查漏补缺

Java 程序员 后端

卧薪尝胆70天内推入职阿里,2021Java春招

Java 程序员 后端

厉害了!尚硅谷mysql中employees表,腾讯T2手把手教你

Java 程序员 后端

大数据Flink作业

Clarke

1-3年Android开发工程师面试经验分享,真的太香了

android 程序员 移动开发

10天用Flutter撸了个高仿携程App,2021年Android面试心得

android 程序员 移动开发

15分钟的字节跳动视频面试,34岁Android程序员裸辞

android 程序员 移动开发

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