【发布时间】:2015-11-22 05:15:27
【问题描述】:
我正在为我的客户开发 Web API。他们建议所有响应都应该是一个通用的 JSON 结构。
{ Data:"", Status:true, Message:"" }
如果错误意味着
{ Error:"", Status:false, Message:"" }
哪种方法是创建通用 JSON 结构作为返回的最佳方法。 现在我创建了一个具有这些属性的类。并从 IHttpActionResult、Error.cs 和 Success.cs 创建了 2 个类,从中创建响应并从控制器返回。
东西在我的控制器里,
public IHttpActionResult GetNewsAndAnnouncements()
{
var data = newsAndAnnouncementsDataServices.NewsAndAnnouncements();
if (data != null && data.Count() > 0)
{
return new Success(Request, "News and Announcements Retrieved Successfully", data);
}
return new Error(Request, "No News and Announcements Found");
}
错误.cs
public class Error : IHttpActionResult
{
private readonly string _message;
private readonly HttpRequestMessage _request;
private IErrorResponseModel errorResponse;
public Error(HttpRequestMessage request, string message)
{
_message = message;
_request = request;
errorResponse = new ErrorResponseModel();
}
public Task<HttpResponseMessage> ExecuteAsync(CancellationToken cancellationToken)
{
errorResponse.Message = _message;
errorResponse.Status = false;
errorResponse.Error = _message;
var response = new HttpResponseMessage(HttpStatusCode.BadRequest)
{
Content = new ObjectContent<object>(errorResponse, new JsonMediaTypeFormatter()),
RequestMessage = _request
};
return Task.FromResult(response);
}
}
成功.cs
public class Success : IHttpActionResult
{
private readonly string _message;
private readonly object _data;
private readonly HttpRequestMessage _request;
private IDataResponseModel dataResponse = new DataResponseModel();
public Success(HttpRequestMessage request, string message, object data)
{
_message = message;
_request = request;
_data = data;
}
public Task<HttpResponseMessage> ExecuteAsync(CancellationToken cancellationToken)
{
dataResponse.Message = _message;
dataResponse.Status = true;
dataResponse.Data = _data;
var response = new HttpResponseMessage(HttpStatusCode.OK)
{
Content = new ObjectContent<object>(dataResponse, new JsonMediaTypeFormatter()),
RequestMessage = _request
};
return Task.FromResult(response);
}
}
DataResponseModel.cs
public class DataResponseModel : Mobility.Common.IDataResponseModel
{
public object Data { get; set; }
public string Message { get; set; }
public bool Status { get; set; }
}
ErrorResponseModel.cs
public class ErrorResponseModel : Mobility.Common.IErrorResponseModel
{
public object Error { get; set; }
public string Message { get; set; }
public bool Status { get; set; }
}
这是一个正确的方法。我需要建议。有没有其他方法可以实现这一点。我听说要委派处理程序一些事情。但我对这些没有太多想法。 请帮帮我。
【问题讨论】:
-
对我来说这似乎是一个合理的实现。
-
为什么不返回
Ok(dataResponse)或BadRequest(errorResponse)? -
@Dennis。从哪里?来自 Controller 或 Success.cs。在 BadRequest() 中,我们只能返回一个字符串或 Modelstatedictionry。我想退货。
标签: c# json rest json.net asp.net-web-api2