簡體   English   中英

將包含復雜類型數組的復雜類型傳遞給Web API

[英]Passing complex type containing array of complex types to Web API

這個問題延伸,我試圖將包含復雜對象集合的復雜對象傳遞給ASP.NET Web API控制器操作方法,但是我無法找到用於輸入對象的正確格式。請求。 繼續從克里斯托弗約翰遜的問題(並刪除一些字段為簡單)的例子,如果我改變他的PhoneRequest對象包含一組電話號碼...

public class PhoneRequest
{
    public string[] PhoneNumbers { get; set; }
    public string State { get; set; }
}

...我將參數作為URL編碼的查詢字符串傳遞:

/api/phonenumber?id[0][State]=UT&id[0][PhoneNumbers][0]=555-1234567

...或POST它作為編碼的HTML表單( Content-Type: application/x-www-form-urlencoded )請求體:

[0][State]=UT&[0][PhoneNumbers][0]=555-1234567

......然后一切都很好。 但是如果我將PhoneNumbers從一組字符串更改為一個新的PhoneNumber類型的集合......

public class PhoneRequest
{
    public PhoneNumber[] PhoneNumbers { get; set; }
    public string State { get; set; }
}
public class PhoneNumber
{
    string AreaCode { get; set; }
    string Number { get; set; }
}

......鑒於之前的結果,我在我看來是合乎邏輯的方式傳遞物體......

id[0][State]=UT&id[0][PhoneNumbers][0][AreaCode]=555&id[0][PhoneNumbers][0][Number]=1234567

...或者再次作為一個html形式的帖子...

[0][State]=UT&[0][PhoneNumbers][0][AreaCode]=555&[0][PhoneNumbers][0][Number]=1234567

...然后它仍嘗試綁定它,並進入我的動作方法,但模型只包含State,電話號碼是這個奇怪的ComplexUriAndFormObject事物。 這是我的調試器Watch的復制粘貼:

phoneRequest    {ComplexUriAndFormObject.Models.PhoneRequest[1]}
    [0] {ComplexUriAndFormObject.Models.PhoneRequest}
        PhoneNumbers    {ComplexUriAndFormObject.Models.PhoneNumber[1]}
        [0] {ComplexUriAndFormObject.Models.PhoneNumber}
            AreaCode    null
            Number  null
        State   "UT"

有沒有辦法使用這種格式正確指定這個對象? 或者我是否超出了ASP.NET Web API內置的模型綁定器能夠做到的限制?

注意:請不要說“只使用POST”或“只使用JSON / XML /無論你的內容類型如何”......如果我能夠做到這一點,我會的。

到目前為止,沒有內置的Web API模型綁定器(包括​​派生的FromUri和FromBody屬性)支持傳遞包含查詢字符串的非基本類類型(不包括System.String)的任何屬性的復雜對象。 我遇到了類似的問題,並創建了一個獨特的高級自定義模型綁定器FieldValueModelBinder類,用於處理具有通用列表或數組集合的目標對象層次結構。 我可以使用純查詢字符串類型的源數據,而無需將任何JSON或XML結構嵌入其中。 模型綁定器可以像FromUri和FromBody屬性一樣簡單使用。 它還可以有效地在URI和請求體中傳輸查詢字符串數據。

請閱讀我的文章並使用此鏈接下載我剛剛發布的源代碼。 您還可以從下載源運行測試應用程序,以獲取輸入字符串,模型和結果。 我希望這是您需要的正確解決方案。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM