我已經實施了一個WCD數據服務/ 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,如RFC 3986第3.3節。這反過來,計算結果爲...
pchar = unreserved/pct-encoded/sub-delims/":"/"@"
unreserved = ALPHA/DIGIT/"-"/"."/"_"/"~"
pct-encoded = "%" HEXDIG HEXDIG
sub-delims = "!"/"$"/"&"/"'"/"("/")"
/"*"/"+"/","/";"/"="
其中alpha是%41-%5A和61-%7A%,數字爲30-%39%,連字符%2D,期限爲%2E,下劃線是%5F,代字號是%7E。
而這表明破折號是一個合法的字符,即將到來。不是我需要它。那麼,該規範的哪部分規定了允許的字符是什麼?
感謝您的幫助!
非常感謝你,Vitek!非常感謝您的幫助。 – object88