OData – 大杂烩
前言
本篇记入一些 OData 的小东西。
Query string too long
OData 使用 GET 请求,然后搭配 query string $filter, $select, $expand 等等。
这就有一个问题了。假如 $filter, $select 非常非常长会出问题吗?
通常是不会遇到问题的。参考:Stack Overflow – What is the maximum possible length of a query string?
现代游览器和服务器都能处理很长的 query string,但也有人主张 GET 请求的 query string 尽量不要太长 (for security reason)。
无论如何,假如我们真的遇到人游览器或者服务器的限制,那还是得要有应对方法。
$query
OData 有一个 $query 的规范,简单说就是用 POST 代替 GET。
参考:Docs – Passing OData query options in request body
原本的 request URI 长这样
GET https://localhost:44300/api/products?$select=id&$filter=id eq 3
把它改成
POST https://localhost:44300/api/products/$query Content-Type: text/plain body: $select=id&$filter=id eq 3
把 query string 放到 body 里就可以了。
program.cs 需要加上这两句
Controller 则不需要换。
它的原理很简单,做一个 middle 拦截 request 然后把 POST 换回 GET,接着后续就接回原本的流程处理了。