Web API中的异常处理并返回JSON

trx

我有一个Web API的控制器,该控制器查询数据库并以JSON返回结果,如下所示,

    [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中必须返回JSON之类的异常时,我正在尝试实现错误处理{"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条评论
登录后参与评论

相关文章

来自分类Dev

处理Web API中的异常

来自分类Dev

Web Api异常处理

来自分类Dev

Web API错误处理返回json

来自分类Dev

处理Web API返回的大型JSON数据

来自分类Dev

在Web API中处理OnApplicationError事件中的异常

来自分类Dev

在Web API中处理OnApplicationError事件中的异常

来自分类Dev

从 web api 方法返回异常

来自分类Dev

从Web API中的通用列表返回Json

来自分类Dev

Web API和MVC异常处理

来自分类Dev

Web API和MVC异常处理

来自分类Dev

C#Web API,如何处理异常并返回适当的状态代码

来自分类Dev

从Web API返回camelCased JSON

来自分类Dev

禁用ASP.NET Web API 2中的* all *异常处理(为我自己腾出空间)?

来自分类Dev

使用NLog在ASP.NET Web API 2.1中进行全局异常处理?

来自分类Dev

Linux上ASP.Net Core Web API中未处理的异常

来自分类Dev

在ASP.NET MVC Web Api中返回Json

来自分类Dev

通过Lambda表达式引发异常时如何在ASP.NET Web API中全局处理异常

来自分类Dev

我应该在.Net Web Api 2中返回状态码还是引发异常

来自分类Dev

是否需要完整的示例来使用ASP.NET Web Api中的“ ExceptionHandler”处理未处理的异常?

来自分类Dev

Web API“内存中”请求引发异常

来自分类Dev

在Web API中访问类的异常

来自分类Dev

IIS中托管的Web Api批处理请求为内部URL返回404

来自分类Dev

ASP.Net Web API中的委托处理程序返回错误的状态代码

来自分类Dev

F#:处理Web异常

来自分类Dev

如何在C#WEB API中返回JSON Web令牌?

来自分类Dev

Web API默认应返回JSon

来自分类Dev

ASP .NET Web API返回JSON文件

来自分类Dev

Web API返回嵌套的JSON值

来自分类Dev

Web API返回空的json数组