Как использовать API и вернуть содержимое в формате JSON? - PullRequest
0 голосов
/ 01 мая 2019

Я борюсь со следующей проблемой:

Я создал решение со следующими проектами: 1 интерфейс MVC и 2 API тестирования для тестирования моего брокера бэкэнд API.

В моем интерфейсе я вызываю своего брокера API (который также является API), который отправляет запросы моим 2 тестовым API.Я получаю ответ на этот запрос в своем API Broker в строковом формате и пытаюсь вернуть его в JSON моему внешнему интерфейсу. Как мне использовать этот API и вернуть ответ в JSON моему внешнему интерфейсу?Посмотрите код ниже:

Внешний интерфейс, вызывающий моего брокера API:

[HttpGet]
    public async Task<ActionResult> getCall()
    {
        string url = "http://localhost:54857/";
        string operation = "getClients";

        using (var client = new HttpClient())
        {
            //get logged in userID
            HttpContext context = System.Web.HttpContext.Current;
            string sessionID = context.Session["userID"].ToString();

            //Create request and add headers
            client.BaseAddress = new Uri(url);
            client.DefaultRequestHeaders.Accept.Clear();
            client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));

            //Custom header
            client.DefaultRequestHeaders.Add("loggedInUser", sessionID);

            //Response
            HttpResponseMessage response = await client.GetAsync(operation);
            if (response.IsSuccessStatusCode)
            {
                string jsondata = await response.Content.ReadAsStringAsync();
                return Content(jsondata, "application/json");
            }
            return Json(1, JsonRequestBehavior.AllowGet);
        }
    }

Мой брокер API использует один из двух моих тестовых API:

    [System.Web.Http.AcceptVerbs("GET")]
    [System.Web.Http.HttpGet]
    [System.Web.Http.Route("RedirectApi")]
    public void getCall()
    {
        setVariables();

        WebRequest request = WebRequest.Create(apiUrl);
        HttpWebResponse response = null;
        response = (HttpWebResponse)request.GetResponse();

        using (Stream stream = response.GetResponseStream())
        {
            StreamReader sr = new StreamReader(stream);
            var srResult = sr.ReadToEnd();
            sr.Close();
            //Return JSON object here!

        }
    }

Я также обеспокоен тем, что мой интерфейс ожидает ActionResult вместо объекта JSON, я надеюсь, что вы найдете здесь несколько советов.

Заранее спасибо!

1 Ответ

0 голосов
/ 01 мая 2019

используйте HttpClient для выполнения запроса, который позволяет читать содержимое как строку. Ваш API должен быть настроен таким образом, чтобы он разрешал ответы JSON (поведение по умолчанию), а затем приведен пример выполнения запроса и чтения его в виде строки в формате JSON (если API возвращает тело JSON).

HttpClient client = new HttpClient();
HttpResponseMessage response = await client.GetAsync("http://www.contoso.com/");
response.EnsureSuccessStatusCode();
string responseBody = await response.Content.ReadAsStringAsync();

Получение данных JSON обратно из HTTP-запроса

...