Объект типа возвращаемого исключения WebAPI - PullRequest
0 голосов
/ 16 мая 2019

Я возвращаю объект Custom, когда вызов WebAPI успешен и не выполнен. Как преобразовать объект объекта ответа на стороне клиента для этого WebAPI? В случае исключения.

    [HttpPost]
    public ActionResult<MyRespObject> PostTest([FromBody] MyPostObject obj)
    {
        try
        {

            MyRespObject response = SomeMethod(obj);

            return this.ToActionResult(response);
        }
        catch (Exception ex) {
            return this.ToActionResult(this.LoadMyRespObject(ex));
        }
    }

    protected ActionResult<TResponse> ToActionResult<TResponse>(TResponse response)
    where TResponse : IResponse
    {
        switch (response.Status)
        {
            case ResponseStatus.Success:
                return this.Ok(response);
            case ResponseStatus.InvalidRequest:
                return this.BadRequest(response);
            case ResponseStatus.NotFound:
                return this.NotFound(response);
        }

        return this.StatusCode(500, response);
    }   

В случае исключения, как конвертировать ex в MyRespObject на стороне клиента? Я генерирую клиент, использующий авторест для API?

Ответы [ 2 ]

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

Как преобразовать в правильный объект ответа на стороне клиента для этого WebAPI? В случае исключения.

Вот где промежуточное программное обеспечение входит в картину. Ниже приведен общий подход, которому необходимо следовать, который будет эффективно обрабатывать запрос и в случае ошибки.

  • Определить ErrorHandlingMiddleware , который является асинхронным пользовательским классом.
  • Затем зарегистрируйте этот класс в качестве промежуточного программного обеспечения в Startup.cs, чтобы каждый запрос проходил через это промежуточное программное обеспечение.
  • В случае ошибки напишите модель, в целом похожую на эту

      Class Error { 
             int errorCode {get ;set;}        
             string message {get ;set;}
       }
    

    так что вы можете изменить этот класс, чтобы получить дополнительные свойства, такие как подсказка и т. Д. Ниже ссылки имеют более четкое и хорошее объяснение.

https://code -maze.com / глобальная обработка ошибок-aspnetcore /

Обработка исключений ASP.NET Core Web API

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

Изменение типа возврата на

HttpResponseMessage

тогда клиентская сторона может проверить статус данных

ваш код будет

 public HttpResponseMessage PostTest([FromBody] MyPostObject obj)
{
    try
    {
    ResponseModel _objResponseModel = new ResponseModel();
        MyRespObject response = SomeMethod(obj);

        return this.ToActionResult(response);

    _objResponseModel.Data = response;
            _objResponseModel.Status = response.Status;
            _objResponseModel.Message = "success";
    }
    catch (Exception ex) {
        _objResponseModel.Data = null;
            _objResponseModel.Status = false;
            _objResponseModel.Message = "failed";
    }
 return Request.CreateResponse(HttpStatusCode.OK, _objResponseModel);
}
}  
  public class ResponseModel
{
    public string Message { set; get; }
    public bool Status { set; get; }
    public object Data { set; get; }

}
...