[英]ASP.NET WebApi return different object on exception
我目前正在开发一个 API 并且需要为 api 返回一些对象,或者在某处发生故障时返回错误,主要是因为我依赖于数据库调用。
这是我的一些代码:
public Student GetStudent(string parametr)
{
try
{
// Database call 1
// Database call 2
return new Student();
}
catch (Exception ex)
{
// return new ErrorDetails(ex.message); -- example
return null;
}
}
我的一个限制是我需要把这个 API 放在 swagger 中。 我尝试使用 HttpResponse,它完全符合我对编码部分的需求,但这不适用于 swagger。 我的 web 应用程序不是 asp.net 核心。
关于我应该做什么的任何想法或建议?
提前致谢,
您可以使用 Swagger DataAnnotations 并封装返回数据来实现
首先创建一个 class 来封装这样的错误消息
public class Errors
{
public List<string> ErrorMessages { get; set; } = new List<string>();
}
然后使用这样的注释
适用于 .NET 4.5+(全框架)
[SwaggerResponse(HttpStatusCode.OK, Type = typeof(Student))]
[SwaggerResponse(HttpStatusCode.BadRequest, Type = typeof(Errors))];
public IHttpActionResult GetStudent(string parametr)
{
try
{
// Database call 1
// Database call 2
return Ok(new Student());
}
catch (Exception ex)
{
Errors errors = new Errors();
errors.ErrorMessages.Add(ex.Message);
return Content(HttpStatusCode.BadRequest, errors);
}
}
适用于 .NET 核心
[ProducesResponseType(200, Type = typeof(Student))]
[ProducesResponseType(400, Type = typeof(Errors))]
public IActionResult GetStudent(string parametr)
{
try
{
// Database call 1
// Database call 2
return Ok(new Student());
}
catch (Exception ex)
{
Errors errors = new Errors();
errors.ErrorMessages.Add(ex.Message);
return BadRequest(errors);
}
}
请注意, BadRequest
只是一个返回示例,您应该始终返回正确的 Http 状态码消息,如 404 为未找到,401 为禁止等
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.