Web API의 예외 처리 및 JSON 반환

trx

DB를 쿼리하고 결과를 JSON으로 반환하는 Web API의 컨트롤러가 있습니다.

    [HttpGet]
    public HttpResponseMessage Getdetails(string ROOM, DateTime DOB_GT)
    {
        if (string.IsNullOrEmpty(ROOM))
        {
            return Request.CreateResponse(new { error = "Input paramete cannot be Empty or NULL" });
        }

        try
        {
            List<OracleParameter> prms = new List<OracleParameter>();
            List<string> selectionStrings = new List<string>();
            prms.Add(new OracleParameter("ROOM", OracleDbType.Varchar2, ROOM, ParameterDirection.Input));
            prms.Add(new OracleParameter("DOB_GT", OracleDbType.Date, DOB_GT, ParameterDirection.Input));
            string connStr = ConfigurationManager.ConnectionStrings["TBaseConnection"].ConnectionString;
            using (OracleConnection dbconn = new OracleConnection(connStr))
            {
                DataSet userDataset = new DataSet();
                var strQuery = "SELECT * from RESULTS_VW where ROOM = :ROOM and DOB > :DOB_GT";
                var returnObject = new { data = new OracleDataTableJsonResponse(connStr, strQuery, prms.ToArray()) };
                var response = Request.CreateResponse(HttpStatusCode.OK, returnObject, MediaTypeHeaderValue.Parse("application/json"));
                ContentDispositionHeaderValue contentDisposition = null;
                if (ContentDispositionHeaderValue.TryParse("inline; filename=TData.json", out contentDisposition))
                {
                    response.Content.Headers.ContentDisposition = contentDisposition;
                }
                return response;
            }
        }
        catch (Exception ex)
         {   var returnObj = new { error = ex.Message };
             var response = Request.CreateResponse(HttpStatusCode.BadRequest, returnObj, MediaTypeHeaderValue.Parse("application/json"));
             ContentDispositionHeaderValue contentDisposition = null;
             if (ContentDispositionHeaderValue.TryParse("inline; filename=error.json", out contentDisposition))
             {
                 response.Content.Headers.ContentDisposition = contentDisposition;
             }
             return response;
         }
     }
    }

API는 유효한 쿼리 매개 변수에 대해 완벽하게 작동합니다. 하지만 API에 예외가있을 때 오류 처리를 구현하려고합니다 {"error":" Exception Message"}.. 위 코드에는 예외를 처리하는 catch 블록이 있습니다. 그러나 예외가 있으면 아무것도 반환하지 않습니다. 예외에서 JSON을 구성하는 간단한 방법을 제안하십시오.여기에 이미지 설명 입력

Shiham

일반 응답 클래스를 사용하여 통신 모델을 단순화하십시오. 이를 위해 당신은 가질 것입니다;

  • 일반 응답 클래스 (공통 응답 객체)
  • 도메인 응답 모델 (로직이 포함 된 클래스)

아래 코드를 참조하십시오.

  1. GenericResponse.cs

    public class GeneicResponse<T>
    { 
        private Response(){}
    
        public Response(T data)
        {
            this.Data = data;
            this.Error = String.Empty;
        }
    
        public Response(Exception ex)
        {
            this.Data = default(T);
            this.Error = ex.Message;
        }
    
        public T Data { get; set; }
        public string Error { get; set; }
    }
    
  2. DomainModel.cs

    public class DomainModel
    {
        public int                      ID      { get; set; }
        public string                   Name    { get; set; }
    
    
        public DomainModel() { }
    
        public DomainModel(int id)
        {
            //populate object properties from database here
        }
    }
    
  3. 컨트롤러 클래스 :

    [Route("api/myApiMethod")]
    public Response<DomainModel> GetDetails(string ROOM, DateTime DOB_GT)
    {
        try
        {
            DomainModel myDomainModel   = new DomainModel(ROOM, DOB_GT);
            return new Response<DomainModel>(myDomainModel);
        }
        catch (Exception ex)
        {
            return new Response<DomainModel>(ex);
        }
    }
    

이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.

침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

Related 관련 기사

뜨겁다태그

보관