C# Web API Json响应
我正在为我的客户开发Web API。他们建议所有响应都应该是一个公共JSON结构C# Web API Json响应,c#,json,rest,json.net,asp.net-web-api2,C#,Json,Rest,Json.net,Asp.net Web Api2,我正在为我的客户开发Web API。他们建议所有响应都应该是一个公共JSON结构 { Data:"", Status:true, Message:"" } 如果错误意味着 { Error:"", Status:false, Message:"" } 哪种方法是创建公共JSON结构作为返回的最佳方法。 现在我创建了一个具有这些属性的类。并从IHttpActionResult创建了两个类Error.cs和Success.cs,从中创建响应并从控制器返回 那东西在我的控制器里 public IHt
{ Data:"", Status:true, Message:"" }
如果错误意味着
{ Error:"", Status:false, Message:"" }
哪种方法是创建公共JSON结构作为返回的最佳方法。
现在我创建了一个具有这些属性的类。并从IHttpActionResult创建了两个类Error.cs和Success.cs,从中创建响应并从控制器返回
那东西在我的控制器里
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");
}
Error.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);
}
}
ErrorResponseModel.cs
public class DataResponseModel : Mobility.Common.IDataResponseModel
{
public object Data { get; set; }
public string Message { get; set; }
public bool Status { get; set; }
}
public class ErrorResponseModel : Mobility.Common.IErrorResponseModel
{
public object Error { get; set; }
public string Message { get; set; }
public bool Status { get; set; }
}
这是正确的方法吗。我需要建议。有没有其他方法可以做到这一点。我听说有人授权给我。但我对这些不太了解。
请帮助我。此问题的另一个解决方案是使用自定义处理程序连接到ASP.NET管道,以构建公共响应对象。 例如:
[DataContract]
public class ApiResponse
{
[DataMember]
public string Version { get { return "1.2.3"; } }
[DataMember]
public int StatusCode { get; set; }
[DataMember(EmitDefaultValue = false)]
public string ErrorMessage { get; set; }
[DataMember(EmitDefaultValue = false)]
public object Result { get; set; }
public ApiResponse(HttpStatusCode statusCode, object result = null, string errorMessage = null)
{
StatusCode = (int)statusCode;
Result = result;
ErrorMessage = errorMessage;
}
}
看看这篇文章,看看它的参考实现对我来说似乎是一个合理的实现。为什么不返回
Ok(dataResponse)
或BadRequest(errorResponse)
?@Dennis。从哪里来?来自Controller或Success.cs。在BadRequest()中,我们只能返回字符串或ModelStateDictionary。我想退一个模型。
[DataContract]
public class ApiResponse
{
[DataMember]
public string Version { get { return "1.2.3"; } }
[DataMember]
public int StatusCode { get; set; }
[DataMember(EmitDefaultValue = false)]
public string ErrorMessage { get; set; }
[DataMember(EmitDefaultValue = false)]
public object Result { get; set; }
public ApiResponse(HttpStatusCode statusCode, object result = null, string errorMessage = null)
{
StatusCode = (int)statusCode;
Result = result;
ErrorMessage = errorMessage;
}
}