エンティティをオープンタイプとして設定して、WCD Data Services/ODataサーバーを実装しました。カスタムIMetadataProvider、IQueryProviderなどを使用しています。エンティティの作成、開いているプロパティの設定、取得、更新、検索を行うことができます。ほとんどの場合です。名前に「ダッシュ」のようなものが含まれているプロパティを検索しようとすると、問題が発生します
これは機能します:
GET /Service/Cases?$filter=ABC eq 'ABC'
これは機能しません:
GET /Service/Cases?$filter=A-BC eq 'ABC'
これも機能しません:
GET /Service/Cases?$filter=A%2DBC eq 'ABC'
次のエラーが発生します。
<error xmlns="http://schemas.microsoft.com/ado/2007/08/dataservices/metadata">
<code />
<message xml:lang="en-US">Syntax error at position 7.</message>
</error>
(そして、私が言ったように、名前にダッシュが含まれるオープンプロパティを持つエンティティを取得することができます。そしてそれを更新するなど)
URLを解析しているものはすべて、ダッシュを減算式として解釈していると思います。これは理にかなっています。OData仕様を正しく読み取った場合を除いて、エンティティのプロパティ名はentitySimpleProperty(仕様では定義されていませんが、entityPropertyのタイプミスだと思います)によって定義されます...これは、で定義されているように*pcharとして定義されます。 RFC3986セクション3.3。それは、順番に、評価します...
pchar = unreserved / pct-encoded / sub-delims / ":" / "@"
unreserved = ALPHA / DIGIT / "-" / "." / "_" / "~"
pct-encoded = "%" HEXDIG HEXDIG
sub-delims = "!" / "$" / "&" / "'" / "(" / ")"
/ "*" / "+" / "," / ";" / "="
ALPHAが%41-%5Aおよび%61-%7A、DIGITが%30-%39、ハイフンが%2D、ピリオドが%2E、アンダースコアが%5F、チルダが%7Eの場合。
そして、それはダッシュが合法的なキャラクターであり、完全に一周することを示しています。必要なわけではありません。では、仕様のどの部分が許容文字を規定しているのでしょうか。
助けてくれてありがとう!