Извлечение данных JSON с помощью .netcore из веб-интерфейса - PullRequest
0 голосов
/ 21 октября 2019

Я сделал API, в котором есть некоторые данные, например, www.example.com/data/select?indent=on&q=title:asthma предоставляет данные в формате JSON, например

{
"responseHeader":{
"status":0,
"QTime":2,
"params":
{
"q":"title:asthma",
"indent":"on",
"wt":"json"
},
"response":{"numFound":1,"start":0, docs:[
{
"tstamp": "xxxx"
"id": "xxxxx"
"title": "Asthma is a medical term"
"url": "www.example.com/xxxx"
"content":"xxxxx"
}]}
}}

Я хочу вызвать тот же URL из моего приложения .netcore, чтобы у меня был заголовоки URL из ответа и показать его моему приложению .netcore. Как новичок в .netcore, довольно сложно привыкнуть к архитектуре MVC. Моя модель выглядит следующим образом

namespace searchEngineTesting.Models
{
    public class SearchModel
    {
        public string Title {get; set;}
        public string Source {get; set;}

    }
}

Как я могу использовать контроллер, который всякий раз, когда триггеры принимают строку в качестве ввода, например cancer, и помещает ее в заголовок API, например www.example.com/data/select?indent=on&q=title:cancer, и получает title и url из ответа.

1 Ответ

0 голосов
/ 22 октября 2019

Вы можете получить данные JSON, как показано ниже:

[HttpGet]
public  async Task<JsonResult> Get()
{
    var model = new SearchModel();
    var url = "https://localhost:5001/api/values/test";//it should be the url of your api
    using (var httpClient = new HttpClient())
    {
        using (var response = await httpClient.GetAsync(url))
        {
            using (var content = response.Content)
            {  
               //get the json result from your api
                var result = await content.ReadAsStringAsync();
                var root = (JObject)JsonConvert.DeserializeObject(result);
                var items = root.SelectToken("responseHeader").Children().OfType<JProperty>().ToDictionary(p => p.Name, p => p.Value);
                foreach(var item in items)
                {
                    if(item.Key== "response")
                    {
                        var key = item.Value.SelectToken("").OfType<JProperty>().ToDictionary(p => p.Name, p => p.Value);

                        foreach (var k in key)
                        { 
                            if(k.Key== "docs")
                            {
                                var tests = JsonConvert.DeserializeObject<JArray>(k.Value.ToString());
                                var data = k.Value.SelectToken("").Children().First();
                                var test = data.SelectToken("").Children().OfType<JProperty>().ToDictionary(p => p.Name, p => p.Value);
                                foreach (var t in test)
                                {
                                    if (t.Key == "url")
                                    {
                                        model.Source = t.Value.ToString();
                                    }
                                    else if (t.Key=="title")
                                    {
                                        model.Title = t.Value.ToString();
                                    }
                                }
                            }
                        }
                    }
                }
                return new JsonResult(model);
            }
        }
    }
}
[HttpGet("[Action]")]
public string test() 
{
   //for easy testing,I just read your json file and return string
    var jsonstring = System.IO.File.ReadAllText("C:\\test.json");
    return jsonstring;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...