写点什么

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

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

关注

评论

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

针对Web应用的攻击模式

穿过生命散发芬芳

HTTP 1月月更

运维进阶训练营 -W10H

赤色闪电

运维

从输入URL到渲染的过程中到底发生了什么?

loveX001

JavaScript

vue为什么v-for的优先级比v-if的高?

bb_xiaxia1998

Vue

new Vue的时候到底做了什么

bb_xiaxia1998

Vue

2023-01-01:remix-ide是浏览器的ide,官方已经提供地址,但是需要连接外网。如果是内网,需要自己在服务器里搭建remix-ide;另一种方式是用remix-ide的桌面版。这里只讨论

福大大架构师每日一题

云原生 k8s k3s 福大大 remix-ide

华为云ECS,最专业的云服务专家

科技说

华为云弹性云服务器ECS,助力企业业务持续稳定运行

科技说

高级前端必会手写面试题及答案

helloworld1024fd

JavaScript

校招前端二面高频vue面试题

bb_xiaxia1998

Vue

高级前端二面手写面试题(边面边更)

helloworld1024fd

JavaScript

大数据时代来临,华为云ECS为企业释放数据生产力

科技说

同是弹性公网IP,华为云弹性公网IP的优势有哪些?

科技说

CleanMyMac2024一款超好用的Mac清理优化工具

茶色酒

CleanMyMac CleanMyMac X CleanMyMac X2023

能否手写vue3响应式原理-面试进阶

helloworld1024fd

JavaScript

React源码分析8-状态更新的优先级机制

flyzz177

React

【低成本“上云”】华为云ECS,助力企业数字化转型!

科技说

华为云弹性云服务器,助推多行业数字化转型

科技说

模块五作业

Ryan

构架

滴滴前端常见面试题

loveX001

JavaScript

校招前端一面经典react面试题(附答案)

beifeng1996

React

2022前端二面react面试题(边面边更)

beifeng1996

React

React源码分析8-状态更新的优先级机制

flyzz177

React

校招前端面试题集锦

loveX001

JavaScript

CleanMyMac2024专业Mac清理软件下载

茶色酒

CleanMyMac2024

OpenTelemetry系列 (五)| OpenTelemetry Java Instrumentation二次开发指南

骑牛上青山

Java 调用链 OpenTelemetry 微服务调用链 agent

从这两道题重新理解,JS的this、作用域、闭包、对象

loveX001

JavaScript

面试官让你说说react状态管理?

beifeng1996

React

手撕常见JS面试题

helloworld1024fd

JavaScript

从React源码分析看useEffect

flyzz177

React

架构训练营模块二作业

gigifrog

架构训练营

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