共用方式為


針對 Dataverse Web API 用戶端錯誤進行疑難解答

本文說明使用 Dataverse Web API 時可能會遇到的常見客戶端錯誤,以及如何避免這些錯誤。

找不到區段的資源

徵兆

要求

GET [Organization URI]/api/data/v9.2/Account HTTP/1.1

回應

HTTP/1.1 404 Not Found

{
 "error": {
  "code": "0x8006088a",
  "message": "Resource not found for the segment 'Account'."
 }
}

原因

當您針對資源使用不正確的名稱時,就會發生此錯誤。 該資源可能是實體集、函式或動作的名稱。 這些資源名稱會區分大小寫。 在上述範例中,有一個稱為 accounts的實體集,但不是名為 Account的實體集。

如果資源是定義為自定義進程動作動作,如果自定義進程動作處於非使用中狀態,也可能會發生此錯誤。

如何避免

在類型 'Microsoft.Dynamics.CRM 上找不到名為 '{property name}' 的屬性。{實體名稱}'

徵兆

要求

GET [Organization URI]/api/data/v9.2/accounts?$select=Name HTTP/1.1

回應

HTTP/1.1 400 Bad Request

{
 "error": {
  "code": "0x0",
  "message": "Could not find a property named 'Name' on type 'Microsoft.Dynamics.CRM.account'."
 }
}

原因

當您針對屬性使用不正確的名稱時,就會發生此錯誤。 屬性名稱會區分大小寫。

在上述範例中,有一個稱為 name的屬性,但不是一個名為 Name的屬性。

如何避免

確認您使用的名稱存在於 CSDL $metadata 檔案中。 如需詳細資訊,請參閱 Web API 屬性

找不到符合要求 URI 的 HTTP 資源

徵兆

要求

POST [Organization URI]/api/data/v9.2/WhoAmI

回應

HTTP/1.1 404 Not Found

{
 "error": {
  "code": "",
  "message": "No HTTP resource was found that matches the request URI '[Organization URI]/api/data/v9.2/WhoAmI'."
 }
}

原因

當不正確的 HTTP 方法套用至函式或動作時,就會發生此錯誤。 在這裡情況下, WhoAmI 函 式需要使用 GET ,但 POST 會使用 。

如何避免

請注意您使用何種 OData 作業,以及要使用的正確 HTTP 方法。 如需詳細資訊,請參閱

實體 'Microsoft.Dynamics.CRM 中找到無效的屬性 {property name}。{實體名稱}'

徵兆

要求

POST [Organization URI]/api/data/v9.2/accounts HTTP/1.1

{
 "Name": "Account name"
}

回應

HTTP/1.1 400 Bad Request

{
 "error": {
  "code": "0x0",
  "message": "An error occurred while validating input parameters: 
    Microsoft.Crm.CrmException: Invalid property 'Name' was found in entity 'Microsoft.Dynamics.CRM.account'. 
    ---> Microsoft.OData.ODataException: Does not support untyped value in non-open type.<truncated for brevity>"
 }
}

原因

之所以發生此錯誤,是因為使用了屬性的不正確名稱。 屬性名稱會區分大小寫,且 Name 已使用,而不是 name

如何避免

確認您使用的屬性名稱存在於 CSDL $metadata 檔案中。 如需詳細資訊,請參閱 Web API 屬性

用戶為實體 『{entity name}』 提供的 Payload 中所識別的錯誤

發生此錯誤有兩個不同的問題。 差異在於 InnerException。

InnerException : Microsoft.OData.ODataException: 在承載中找到未宣告的屬性 [...]

當傳送無效的導覽屬性名稱與要求時,就會發生此錯誤。

徵兆

要求

POST [Organization URI]/api/data/v9.2/contacts HTTP/1.1

{
  "firstname":"test",
  "lastname":"contact",
  "parentcustomerid@odata.bind": "accounts(a779956b-d748-ed11-bb44-6045bd01152a)"
}

回應

HTTP/1.1 400 Bad Request

{
    "error": {
        "code": "0x80048d19",
        "message": "Error identified in Payload provided by the user for Entity :'contacts'  ---->  
        InnerException : Microsoft.OData.ODataException: An undeclared property 'parentcustomerid' 
        which only has property annotations in the payload but no property value was found in the payload. 
        In OData, only declared navigation properties and declared named streams can be represented as 
        properties without values <truncated for brevity>".
    }
}

原因

因為聯繫人實體類型中沒有名為 parentcustomerid的單一值導覽屬性,因此會發生此錯誤。 如需詳細資訊,請參閱 單一值導覽屬性

parentcustomerid 是聯繫人數據表中查閱數據行的邏輯名稱。 所有查閱在 OData 中都有一或多個單一值導覽屬性。 查閱屬性的名稱不一定符合對應的單一值導覽屬性名稱。

在此情況下,數據 parentcustomerid 行是客戶查閱類型,這是一種 多數據表查閱 ,可能會連結到帳戶或聯繫人數據表。 為了支援此客戶查閱,有兩個不同的關聯性,而且每個關聯性都有不同的單一值導覽屬性。 在這裡情況下,正確的單一值導覽屬性為 parentcustomerid_account

如何避免

確認您使用的 導覽屬性名稱存在於 CSDL $metadata 檔案中。 如需詳細資訊,請參閱 Web API 導覽屬性,特別是 多數據表查閱一 節。

InnerException :System.ArgumentException:無法讀取數據流

執行批次作業發生此錯誤。

徵兆

傳送要求時 $batch ,您會收到下列錯誤。

回應

HTTP/1.1 400 Bad Request

--batchresponse_5bd81edb-2ef9-4269-85c3-4623981e6c6e
Content-Type: application/http
Content-Transfer-Encoding: binary

HTTP/1.1 400 Bad Request
REQ_ID: 4c8c75eb-10bf-47f9-9998-c119146d511f
Content-Type: application/json; odata.metadata=minimal
OData-Version: 4.0

{"error":{"code":"0x80048d19","message":"Error identified in Payload provided by the user for Entity :'accounts',
For more information on this error please follow this help link https://go.microsoft.com/fwlink/?linkid=2195293
---->  InnerException : System.ArgumentException: Stream was not readable.\r\n
at System.IO.StreamReader..ctor(Stream stream, Encoding encoding, Boolean detectEncodingFromByteOrderMarks, Int32 bufferSize, Boolean leaveOpen)\r\n
at System.IO.StreamReader..ctor(Stream stream, Encoding encoding)\r\n
at Microsoft.OData.JsonLight.ODataJsonLightInputContext.CreateTextReader(Stream messageStream, Encoding encoding)\r\n
at Microsoft.OData.JsonLight.ODataJsonLightInputContext..ctor(ODataMessageInfo messageInfo, ODataMessageReaderSettings messageReaderSettings)\r\n
at Microsoft.OData.Json.ODataJsonFormat.CreateInputContext(ODataMessageInfo messageInfo, ODataMessageReaderSettings messageReaderSettings)\r\n
at Microsoft.OData.ODataMessageReader.ReadFromInput[T](Func`2 readFunc, ODataPayloadKind[] payloadKinds)\r\n
at System.Web.OData.Formatter.Deserialization.ODataResourceDeserializer.Read(ODataMessageReader messageReader, Type type, ODataDeserializerContext readContext)\r\n
at System.Web.OData.Formatter.ODataMediaTypeFormatter.ReadFromStream(Type type, Stream readStream, HttpContent content, IFormatterLogger formatterLogger)."}}
--batchresponse_5bd81edb-2ef9-4269-85c3-4623981e6c6e--

原因

批次要求本文中CRLF以外的行尾結束符會導致這個還原串行化錯誤。

視您使用的編輯器而定,這些非列印字元可能很難看到。 如果您使用 [記事本++],您可以使用 [ 顯示所有字元 ] 選項來顯示這些字元。

此承載可運作:

顯示批次要求本文的螢幕快照,其中包含所有行的CRLF結尾。

此承載失敗,因為最後一行不會以 CRLF結尾。

此螢幕快照顯示最後一行遺漏 CRLF 的批次要求本文。

在此情況下,只要在最後一行結尾新增歸位字元就足以讓它成功。

如何避免

請確定要求本文中的所有 $batch 行尾結束都是 CRLF。 如果您無法使用 CRLF,請在批次要求本文結尾新增兩個非CRLF 行結尾,以解決這個還原串行化錯誤。 如需詳細資訊,請參閱 Batch 要求

在 'Prefer' 標頭內的 'odata.include-annotations' 值上識別的錯誤

徵兆

當 Dataverse Web API 在要求標頭值中Prefer收到無效值的要求odata.include-annotations,就會發生此錯誤。 當要求使用 POSTPATCHPUTGET HTTP 方法 Prefer 與包含無效或格式不正確的值的要求標頭傳送時,就會發生此問題。

在下列範例中, odata.include-annotations 值不正確地包含反斜杠 (\) 以逸出引號字元。

要求

POST [Organization URI]/api/data/v9.2/contacts HTTP/1.1

Prefer: odata.include-annotations=\"*\"

{
  "firstname":"test",
  "lastname":"contact"
}

回應

HTTP/1.1 400 Bad Request

{
  "Message": "Error identified on the 'odata.include-annotations' value inside the 'Prefer' header. 
  Refer to the following link for more details: https://go.microsoft.com/fwlink/?linkid=2300109. 
  See exception message for more details 'An error occurred when parsing the HTTP header 'Prefer'. The header value 'odata.include-annotations=\\\"*\\\"' is incorrect at position '26' because the escape character '\\' is not inside a quoted-string.'.",
  "ErrorCode": "0x80097303"
}

原因

為了提供更安全的服務,我們會修正在使用POSTPATCHPUT HTTP 方法時,處理無效Prefer的要求標頭值時沒有驗證的問題。 現在,所有 HTTP 方法都會強制執行驗證。 此錯誤發生於 Dataverse 9.2.2412.3 版開始於 2025 年 1 月開始部署,且將在 2025 年 2 月前部署到所有區域。

如何避免

檢閱如何在 Dataverse Web API 中正確設定 Prefer 標頭的指引。

另請參閱