iT邦幫忙

0

Postman 使用 form-data post List 以及 json 格式處理

  • 分享至 

  • xImage

各位前輩大家好 小弟使用 Postman 測試 api 的時候遇到幾個問題

  1. 如果指定只用 form-data 的方式 post list的話,要如何設定Key/Value呢

由於做法是宣告一個物件,當中會有一個Author的List預計存放各種不同的Author資料
最後將物件送到後端用指定類別拆開,然後Insert到資料庫

這裡遇到另一個問題是
如果使用 HttpContext.Request.Form["Author"]的話
有兩筆一樣的資料應該如何設定迴圈(跑的次數?)逐一add回物件內的list呢

預想的結構如下:

{
"id":1,
"type":1,
"Author":[
    {
    "Name":"Ann",
    "Age":45
    },
    {
    "Name":"Amy",
    "Age":32
    }
]
}

{

  1. 倘若方法一確實無法做到的話,在從form-data post的時候就直接post如下的物件
{"Author":[
    {
    "Name":"Ann",
    "Age":45
    },
    {
    "Name":"Amy",
    "Age":32
    }
]}

但用HttpContext.Request.Form["Author"]會多一套大括號,也就是{{內容}}
要怎麼處理掉最外層的{}呢

框架:.net core 3.1
系統:windows10

天黑 iT邦研究生 5 級 ‧ 2021-12-20 15:36:39 檢舉
也許你可以參考一下 連結 : https://stackoverflow.com/questions/16104078/appending-array-to-formdata-and-send-via-ajax
Homura iT邦高手 1 級 ‧ 2021-12-20 17:44:13 檢舉
請使用model來裝你傳進來的資料.....
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

2 個回答

1
ekkusu
iT邦新手 4 級 ‧ 2021-12-20 18:09:22
最佳解答

https://ithelp.ithome.com.tw/upload/images/20211220/20120408602spVisHR.png

public IActionResult FromData([FromForm] ModelOne model)
{
    var authorList = new List<Author>();
    foreach (var VARIABLE in model.Authors)
    {
        authorList.Add(JsonSerializer.Deserialize<Author>(VARIABLE));
    }

    return Ok(authorList);
}

public class ModelOne
{
    public int id { get; set; }
    public int type { get; set; }
    public IList<string> Authors { get; set; }

}
public class Author
{
    public string Name { get; set; }
    public int Age { get; set; }
}

大概只能這樣做了吧
fromdata裡面的value視為文字 要自行轉換成物件

請問一下,第一張圖的Postman的Author
我用同樣方法的話,收到的formdata是{}包兩個物件,並不是像你的結果是用[]包起來,導致解析有問題
想請教一下是哪裡設定錯誤呢

使用foreach可以逐筆取出來,這一塊是解決了,十分感謝!

2

簡易文字教學:(我懶的貼圖)

1.form-data 直接對應法
Body => form-data 有其對應的KEY及VALUE。KEY可以選擇TEXT還是FILE。
這是有要測試上傳檔案時的唯一模式。

2.BULK資料模式
在其可編輯的右上角會有個BULK EDIT。
可填其換行資料格式。常用的資料可以儲存在這。支援註解。
所以方便替換資料。

test:1
test2:2

3.JSON資料模式
Body => raw =>最右邊預設會是TEXT,可以將其轉成你要的資料。我習慣是直接換成JSON。
因為前端大多是物件傳送。
大多數來說,一般的測試會用這種模式。因為可以從瀏覽器的開發模式直接拿到POST的JSON格式資料

以上是最簡單的資料傳送的方式說明。
至於你想要程式化處理。

https://learning.postman.com/docs/writing-scripts/test-scripts/

這裏有許多可以利用的配套。你可以找一下你想要的處理方式跟對應。
目前新版的好像可以規劃流程圖了。只是我還沒摸那一塊。
不過那邊理論上可以達到你要的東西。就是得要研究一下就是了。

看更多先前的回應...收起先前的回應...

感謝回答,另外請教如果使用HttpContext.Request.Form["Author"]取出來的值會有多大括號該如何處理呢
https://stackoverflow.com/questions/10830772/parsing-json-in-c-sharp
我其實要做的事情跟這一則文章幾乎一樣,但目前卡在不知如何單獨的把指定欄位取出並且是一個jsonObject,之後再用指定類別解構

另補充說明一下
我是一次post就會有重複的屬性
比方說Author就有兩位不一樣的,在單次post可以使用兩套一樣的Key/Value嗎? (Author/aaa與Age/30 下面又設定 Author/bbb與Age/20這樣)

一般正常的表單傳送,是不可能有同名份資料可以一起傳送的。
所以推測來說。你是要從陣列式的資料。

由於一般來說我都是從瀏覽器直接獲取PayLoad的傳送資料。COPY到raw內的JSON格式就可以使用。
並不會特別去設定 key 與 value

不過還是教你一下同名的傳送方式
KEY名稱後接中括號內置索引值[?](?為0 1 2 ... 的索引值)
這樣就可以多個同名。

POST進去的資料會直接變陣列格式。

To 浩瀚星空
目前對於你的回答有點懵懂,恐怕是我目前還沒到的境界檻 囧
故在此先選了另一位我較能理解的大大為最佳解答><
十分感謝你的回答,相關的文件及方式我會在後續嘗試理解
謝謝!

放心,我並不追求「最佳解答」的。
畢竟我也很懶的貼圖。單純用文字來說明,確實不太好解釋。
人家花時間截圖講解到你能懂,他當然就是最佳的答案了。

PostMan我其實也並未完全了解到很透。
就大約是一般能前後端分離測試能用就行了。
一些自動化測試跟進階的用法。我也還不是全了解的。

ekkusu iT邦新手 4 級 ‧ 2021-12-23 11:13:17 檢舉

joey19930809
補充一下 關於星空大說的事情
一般在fromdata底下是不太會傳送這種格式的資料
主要是因為他是對應key value,等於是你一個key會對應到多筆value
你如何確定這筆value是對的,或是前端惡意傳給你的?
對於這樣的資料結構其實你會比較難去驗證
所以星空大才會說 不太會丟"同名的資料"
反而有這種需求會用frombody 去收json 或是其他格式
那你建立的model 就可以是List
底下還可以用正則去做處理 但List就沒辦法了

我要發表回答

立即登入回答