我有一个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的简单方法。
使用通用响应类来简化通信模型。为此,您将拥有;
参见下面的代码:
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; }
}
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
}
}
您的控制器类:
[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] 删除。
我来说两句