Правильный синтаксис динамического c возвращаемого типа ActionResult <T>, используемого явным ActionResult <Contact>и другими - PullRequest
0 голосов
/ 30 марта 2020

У меня есть следующий код, я хотел бы создать динамический c возвращаемый тип ActionResult функции getResponse, поэтому его можно использовать как обобщенную c функцию для всех других моделей, таких как ActionResult.ActionResult et c et c.

Причина, по которой у меня есть явный тип возвращаемого значения, заключается в том, что он должен работать с Swashbuckle openAPI, ответ которого может быть в XML, Json, Text ... и выглядит он работает только с помощью ActionResult

Каков правильный синтаксис publi c asyn c Task> getResponse (результаты HttpResponseMessage) ??? Спасибо, ребята.

public async Task<ActionResult<Contact>> Get(string referenceId = "af2f8f37-c1d9-40d3-9f29-08d5dab10621")
    {
        Settings.ReferenceID = referenceId;
        //same as get a single Contact;
        var url = Settings.PutContactUrl;
        Log.Information($"Endpoint hit: {url}");

        var requestData = new HttpRequestMessage
        {
            Method = HttpMethod.Get,
            RequestUri = new Uri(url),
        };
        var results = await _client.SendAsync(requestData);
        return getResponse(results);

        if (!results.IsSuccessStatusCode)
            return StatusCode((int)results.StatusCode, JsonConvert.DeserializeObject(results.Content.ReadAsStringAsync().Result));

        //need to cast type to provide xml result
        var contact = JsonConvert.DeserializeObject<Contact>(results.Content.ReadAsStringAsync().Result);
        //var abc = _mapper.Map<Contact>(contact);

        return StatusCode((int)results.StatusCode, contact);
    }

    [NonAction]
    public async Task<ActionResult<T>> getResponse(HttpResponseMessage results)
    {
       if (results.IsSuccessStatusCode)
        {
            switch (results.StatusCode)
            {
                case HttpStatusCode.NotFound:
                    return StatusCode((int)results.StatusCode, results.Content.ReadAsStringAsync().Result);
                default:
                    return StatusCode((int)results.StatusCode, JsonConvert.DeserializeObject(results.Content.ReadAsStringAsync().Result));
            }
        }

        return StatusCode((int)results.StatusCode, JsonConvert.DeserializeObject(results.Content.ReadAsStringAsync().Result));
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...