Отправка правильного ответа от веб-API - PullRequest
0 голосов
/ 09 мая 2019

Я пытаюсь отправить правильный ответ из Web API, т. Е. Если произошла какая-либо ошибка, отправьте сообщение об ошибке.Поток кода для этого кода следующий:

 [HttpPost]
        public IActionResult GetInfo([FromBody] InfoModel info)
        {
            try
            {
                var result = new Info().ProcessInfoResponse(info);
                if (result==null)
                    return BadRequest();
                else
                    return Ok(result);

            }
            catch (Exception e)
            {
                Log.Error("some exception", e);
                return StatusCode(500, e.Message);
            }
        }

и из среднего уровня, т.е. из класса Info у нас есть другой метод с собственным возвращаемым типом, и отсюда мы вызываем сторонние API, которые находятся вдругой класс.

public InfoResponse ProcessInfoResponse(InfoModel info)
{
    try
        {
            var result = serviceLayer.Post<InfoModel>(info);

            if (result != null)
            {
               // Do Something
            }
            else
            {
                Log.Error("some error");
                return null;
            }
        }
        catch (Exception ex)
        {
            Log.Error("some error");
            return null;
        }
}

public InfoRequest ProcessInfoRequest()
{

}

И на уровне сервиса мы вызываем сторонний API, как показано ниже

public HttpResponseMessage Post<T>(T parm) where T : class
        {
            try
            {
                _client.DefaultRequestHeaders.Clear();

                var postTask = _client.PostAsync("some third party url", Serialize<T>(parm));
                postTask.Wait();

                if (postTask.Result.IsSuccessStatusCode)
                {
                    return postTask.Result;
                }
                else
                {
                    Log.Error("some error in service layer");
                }
            }
            catch (Exception ex)
            {
                Log.Error("some error in service layer");
            }

            return default(HttpResponseMessage);
        }

Поэтому мой вопрос заключается в том, как вернуть исключения / ошибки, если они есть, и еслинет исключений / ошибок, затем отправьте ответ как есть.Это возможно, сохраняя тип возвращаемого среднего уровня как

. Если сейчас ошибок нет, я могу правильно отправить ответ, поскольку мой средний уровень получает ожидаемый тип возврата.

Проблема в том, что мои методы среднего уровня имеют собственный возвращаемый тип, который заставляет меня отправлять исключение / ошибку как есть.Поскольку я не могу сопоставить его с соответствующим классом ИЛИ с тем же классом.

Я думал, что добавлю новое свойство во все возвращаемые классы / типы, которые будут ссылаться на класс исключения, а затем свяжет детали исключения / ошибкив этот класс.Это позволит сэкономить много изменений кода во всех местах.

Любая помощь по этому вопросу приветствуется!

1 Ответ

1 голос
/ 09 мая 2019

Почему бы не создать объект пользовательского ответа, чтобы:

public IActionResult<MyCustomResponseObject> GetInfo([FromBody] InfoModel info)

public class MyCustomResponseObject
{
    public string Message { get; set; }
    public object Content { get; set; }
    public enum State { get; set; }
}
...