繁体   English   中英

ASP.NET WebApi 在异常时返回不同的 object

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM