调用MakeRequest方法时,我的MVC无法显示正确的视图

时间:2018-10-18 07:58:35

标签: c# .net json api model-view-controller

我有以下课程:

public class Product
{
        [JsonProperty("image")]
        public string ImageURL { get; set; }
        [JsonProperty("superDepartment")]
        public string SuperDepartment { get; set; }
        [JsonProperty("tpnb")]
        public long TPNB { get; set; }
        [JsonProperty("ContentsMeasureType")]
        public string ContentsMeasureType { get; set; }
        [JsonProperty("name")]
        public string Name { get; set; }
        [JsonProperty("UnitOfSale")]
        public int UnitOfSale { get; set; }
        [JsonProperty("description")]
        public IEnumerator<string> LstDescription { get; set; }
        public string Description { get; set; }
        [JsonProperty("AverageSellingUnitWeight")]
        public decimal AverageSellingUnitWeight { get; set; }
        [JsonProperty("UnitQuantity")]
        public string UnitQuantity { get; set; }
        [JsonProperty("id")]
        public long ID { get; set; }
        [JsonProperty("ContentsQuantity")]
        public int ContentsQuantity { get; set; }
        [JsonProperty("department")]
        public string Department { get; set; }
        [JsonProperty("price")]
        public decimal Price { get; set; }
        [JsonProperty("unitprice")]
        public decimal UnitPrice { get; set; }
    }

我在productController上有方法:

    public async Task<ActionResult> MakeRequest(string q)// worked 
    {
        var client = new HttpClient();
        client.DefaultRequestHeaders.Add("Ocp-Apim-Subscription-Key", "56ac439a92694577a2779f3d0ee0cd85");

        var uri = string.Format("https://dev.tescolabs.com/grocery/products/?query={0}&offset={1}&limit={2}", q, 0, 10);

        var response = await client.GetAsync(uri);          
        string body = await response.Content.ReadAsStringAsync();
        Product myoutput = JsonConvert.DeserializeObject<Product>(body);
        }
        return View(body);
    }

我有下面的模型:

由于某种原因,当我调用方法MakeRequest时,它仅将信息显示为字符串,并显示错误消息,如下图所示,显示服务器错误,我们可以从api中看到信息,但它显示为字符串。 error message 来自api的信息应显示在下表中: table

如何在表格上显示数据?还是更好的如何将json数组转换为网络对象?

我知道我的方法下面的部分缺少一些东西

Product myoutput = JsonConvert.DeserializeObject<Product>(body);

2 个答案:

答案 0 :(得分:0)

您正在将json字符串而不是反序列化产品传递给View。 我认为您的View期望使用的是Product类型的模型。

MakeRequest操作的return语句应为return View(myOutput);

答案 1 :(得分:0)

我会简单地告诉你。

您的json模型

  

-uk   --ghs   -产品   ----结果

{
  "uk" : {
    "ghs" : {
      "products": {
        "input_query": "babana",
        "output_query": "banana",
        "filters": {},
        "queryPhase": "post_primary",
        "totals": {
          "all": 109,
          "new": 1,
          "offer": 47
        },
        "config": "default",
        "results": [
          {
            "image": "http://img.tesco.com/Groceries/pi/000/0261480000000/IDShot_90x90.jpg",
            "superDepartment": "Fresh Food",
            "tpnb": 50502269,
            "ContentsMeasureType": "KG",
            "name": "Tesco Bananas Loose",
            "UnitOfSale": 3,
            "description": [ "To help ensure the banana farms we source from are best in class we, and our", "suppliers, now work closely with the Rainforest Alliance, an international", "non profit organisation that works to conserve biodiversity and ensure", "sustainable livelihoods worldwide.", "The Rainforest Alliance Certified&#8482; seal on our bananas   a green frog nestled", "in a circle &#8211; helps us to tell the story of how they are sustainably sourced,", "and assure customers we are sourcing from responsibly managed farms." ],
            "AverageSellingUnitWeight": 2.402,
            "UnitQuantity": "KG",
            "id": 275280804,
            "ContentsQuantity": 1,
            "department": "Fresh Fruit",
            "price": 0.76,
            "unitprice": 0.76
          },
          {
            "image": "http://img.tesco.com/Groceries/pi/875/0000010001875/IDShot_90x90.jpg",
            "superDepartment": "Fresh Food",
            "tpnb": 65728590,
            "ContentsMeasureType": "SNGL",
            "name": "Tesco Ripe Bananas 5 Pack",
            "UnitOfSale": 1,
            "AverageSellingUnitWeight": 0.862,
            "UnitQuantity": "EACH",
            "id": 266419328,
            "ContentsQuantity": 5,
            "department": "Fresh Fruit",
            "price": 0.9,
            "unitprice": 0.18
          },
          {
            "image": "http://img.tesco.com/Groceries/pi/416/0000003251416/IDShot_90x90.jpg",
            "superDepartment": "Fresh Food",
            "tpnb": 77427870,
            "ContentsMeasureType": "SNGL",
            "name": "Tesco Small Bananas 6 Pack",
            "UnitOfSale": 1,
            "description": [ "Small Bananas", "Tesco Small Bananas" ],
            "AverageSellingUnitWeight": 0.965,
            "UnitQuantity": "EACH",
            "id": 285157326,
            "ContentsQuantity": 6,
            "department": "Fresh Fruit",
            "price": 0.9,
            "unitprice": 0.15
          }
        ],
        "suggestions": []
      }
    }
  }
}

如果您查看上面的json结果,则需要一个更全面的模型。

为此,您可以在此处将json结果输入到模型中。 look here

或通过动态使结果对象保持其当前状态。

   string body = response.Content.ReadAsStringAsync().Result;

            dynamic content = JObject.Parse(body);

            var products = content.uk.ghs.products.results;