写点什么

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

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

关注

评论

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

信息获取的四个层级,看看你在哪一级?

boshi

学习 正确阅读 信息需求

基础框架第二周总结「架构师训练营第 1 期」

天天向善

基础框架

Week 2 Assignment

Yinan

命题作业

黄立

设计模式

架构师训练营第 1 期 - 第二周课后练习

Anyou Liu

极客大学架构师训练营

第二周作业

icydolphin

极客大学架构师训练营

在用户现场,你需要注意的几件事情

boshi

项目管理 实施 需求分析

一个草根的日常杂碎(9月24日)

刘新吾

社会百态 生活随想 日常杂碎

LeetCode题解:590. N叉树的后序遍历,递归,JavaScript,详细注释

Lee Chen

大前端 LeetCode

架构师训练营 Week2 - 课后作业

依赖倒置原则 接口隔离原则

架构师训练营第二周课后作业

Gosling

极客大学架构师训练营

第二周学习总结

饭桶

行到瀚海阑干处,坐看华为云起时:中国互联网航海家的远大征程

脑极体

【架构笔记之架构方法】架构师训练营第1期第1周

业哥

极客大学架构师训练营

TensorFlow 篇 | TensorFlow 2.x 分布式训练概览

Alex

tensorflow keras 分布式训练

第二周学习总结

林杭戴

极客大学架构师训练营

第二周作业

龙卷风

极客大学架构师训练营

游戏夜读 | 数据治理的悖论

game1night

基础框架第二周作业「架构师训练营第 1 期」

天天向善

设计原则

如果编程语言是一门武功绝学

C语言与CPP编程

c++ 编程 程序员 程序人生 编程语言

极客时间架构师培训 1 期-第2周总结

Kaven

SQL 如何做 Join

Rayjun

sql

2020.09.21-2020.09.27 学习总结

icydolphin

极客大学架构师训练营

第二周作业

饭桶

用于门牌号码检测的深度学习

计算机与AI

学习 分类

理解依赖倒置原则

林杭戴

极客大学架构师训练营

第2周 框架设计总结

bearlu

程序员陪娃漫画系列——修空调

孙苏勇

程序员 陪伴 漫画

架构师训练营 1 期 - 第二周作业(vaik)

行之

架构师训练营 Week2 框架设计- 学习总结SOLID

flutter 中的video player对比学习

Daniel

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