簡體   English   中英

使用c#從Web Api反序列化BadRequest響應的問題

[英]problem deserializing BadRequest response from Web Api using c#

我有一個web api,當用戶注冊失敗時返回以下json:

{
    "$id":"1",
    "Message":"The request is invalid.",
    "ModelState": {
        "$id":"2",
        "": {
            "$id":"3",
            "$values": ["Name username@gmail.com is already taken."]
        }
    }
}

我已經嘗試了各種各樣的東西來在c#中反序列化它,以便向用戶顯示錯誤消息而沒有任何運氣。

這是關於我嘗試的事情的一個:

https://www.codeproject.com/Articles/825274/ASP-NET-Web-Api-Unwrapping-HTTP-Error-Results-and?msg=5222750

任何有關這方面的幫助將不勝感激。

先感謝您

我希望這能解決你的問題。 我開發使用vb.net並轉換為c#。 沒有在c#上測試過,但在vb.net上有效。

  class SurroundingClass
{
    private void Button1_Click(object sender, EventArgs e)
    {
        var FullResponse = Newtonsoft.Json.JsonConvert.DeserializeObject<Dictionary<string, object>>(WebResult);
        Newtonsoft.Json.Linq.JObject lv2 = FullResponse.Item("ModelState");
        Newtonsoft.Json.Linq.JObject lv3 = lv2.Item("");
        string DisplayResponse = FullResponse.Item("Message") + " " + lv3.Item("$values").First;

        MessageBox.Show(DisplayResponse);
    }

    public string WebResult()
    {
        return "{'$id':'1','Message':'The request is invalid.','ModelState':{'$id':'2','':{'$id':'3','$values':['Name username@gmail.com is already taken.']}}}";
    }
}

嘗試這個:

定義以下類:

class WebApiResponse
{
    public string Message { get; set; }
    public Dictionary<string, IList<string>> ModelState { get; set; }
}

然后使用Newtonsoft.Json庫將json響應反序列WebApiResponse類的實例:

var jsonFromWebApiResponse = @"{""$id"":""1"",""Message"":""The request is invalid."",""ModelState"":{""$id"":""2"","""":{""$id"":""3"",""$values"":[""Name username@gmail.com is already taken.""]}}}";

var webApiResponse = Newtonsoft.Json.JsonConvert.DeserializeObject<WebApiResponse>(jsonFromWebApiResponse);

foreach (var modelState in webApiResponse.ModelState)
{
    foreach (var innerMessage in modelState.Value)
    {
        // Do something with the messages inside ModelState...
    }
}

暫無
暫無

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

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