iT邦幫忙

1

WebAPI接收JObject后如何顯示在WebAPI上?

我遇到的問題是,現在我有一個web api和一個client(winform)
client端會create一組data傳到web api,我的web api有收到一個JObject檔,裏面也有client端資料,但是我要怎麽提取裏面的data並顯示在我的web api?
我用過反序列化,web api會直接回傳500 internal server error...
以下是我的code

//client端

private string WebApiPost(string sParam, string sJson)
        {
            var client = new HttpClient();
            var content = new StringContent(sJson, Encoding.UTF8, "application/json");
            var response = client.PostAsync(sWebAPI_URL + sParam, content).Result;
            var body = response.Content.ReadAsStringAsync().Result;
            return body;
        }

//web API

public object Post([FromBody]object hL7)
        {
            //這裏我收到是一整個object,試過deserialize和强轉成string都不行,兩個都會回傳500 internal server error
            
            
            return hL7;
        }

//Web API controller

public class HL7MID
    {
        public string LOC { get; set; }
        public string COMPANY { get; set; }
        
    }

    public class HL7MID_List
    {
        public string sMSG { get; set; }
        public List<HL7MID> data = new List<HL7MID>();
    }
看更多先前的討論...收起先前的討論...
Homura iT邦高手 1 級 ‧ 2018-12-03 13:48:27 檢舉
你的sjon和sParm傳了什麼??
還有你最下面定義的class上面好像沒有用到耶...
fillano iT邦超人 1 級 ‧ 2018-12-03 14:16:09 檢舉
https://www.newtonsoft.com/json/help/html/SerializingJSON.htm
waikee iT邦新手 5 級 ‧ 2018-12-03 14:16:30 檢舉
sjson内容是這樣"{\"data\":[{\"LOC\":\"TEST\",\"COMPANY\":\"BST\"}],\"sMSG\":null}"
sparam是“ ”
Homura iT邦高手 1 級 ‧ 2018-12-03 14:51:58 檢舉
那controller裡面hL7接到的結果是一樣的嗎?
還是根本沒接到?
waikee iT邦新手 5 級 ‧ 2018-12-03 16:26:12 檢舉
單單回傳hL7是一樣的,我已經發現我的問題了,問題出現在我送出的序列化格式跟我接收的格式不一樣,所以才一直吃不到值。感謝你!!
Homura iT邦高手 1 級 ‧ 2018-12-03 16:28:41 檢舉
哈哈,想說一堆回怎麼序列化,應該是你接收有問題才對XD

2 個回答

1
allenlwh
iT邦研究生 3 級 ‧ 2018-12-03 15:16:36
最佳解答

提供給您參考看看

    public class request_login
    {
        public string email { get; set; }
        public string password { get; set; }
    }
    
    public class login_root
    {
        public string status { get; set; }        
    }
[HttpPost]        
public object login([FromBody]request_login login)
{
    login_root root = new login_root();
    if (login.email == "user@isp.com.tw" && login.password="123456")
    {
        root.status = "OK";
    }
    else
    {
        root.status = "Error";
    }       

    return root;
}
waikee iT邦新手 5 級 ‧ 2018-12-03 16:27:43 檢舉

感謝你!!我已經知道錯誤了!!原來是我序列化的格式跟反序列化的格式不一樣,所以值才一直出不來!

0
waikee iT邦新手 5 級 ‧ 2018-12-03 16:28:31 檢舉

謝謝你!我已經得到解答了!

我要發表回答

立即登入回答