【问题标题】:c# Custom error response for 424 and 422 error codesc# 424和422错误代码的自定义错误响应
【发布时间】:2018-03-13 09:31:11
【问题描述】:

我希望能够从我的 API 返回状态代码 - 424(失败的依赖)和 422(无法处理的实体)。 我们正在使用自定义错误处理程序来处理错误响应,如下所示 -

public class ApiResponse
{
    public string StatusCode { get; set; }
    public string Message { get; set; }
    public ApiResponse(int statusCode, string message = null)
    {
        StatusCode = GetDefaultMessageForStatusCode(statusCode);
        Message = message;
    }
    private static string GetDefaultMessageForStatusCode(int statusCode)
    {
        switch (statusCode)
        {
            case 200:
                return "Success.";
            case 400:
                return "Bad request.";
            case 404:
                return "Not Found.";
            case 424:
                return "Dependency Failure";
            case 500:
                return "An unhandled error occurred.";
            default:
                return null;
        }
    }
}

public class DependencyFailureResponse : ApiResponse
{
    public DependencyFailureResponse(string message) : base(424)
    {
        Message = message;
    }
}

当我从控制器调用 DependencyFailureResponse 时,我会收到“依赖失败”状态代码以及我的自定义消息。 但;正如我所说的那样 -

return BadRequest(new DependencyFailureResponse("Custom message"));

它将始终显示为 400 Bad Request

我希望能够以不显示“400 Bad Request”的方式调用它。 请帮忙!谢谢!

【问题讨论】:

    标签: c# error-handling .net-core


    【解决方案1】:

    BadRequest 是一种将 HttpStatusCode 400 返回给调用者的控制器方法。 你可以试试:

    var response = new DependencyFailureResponse("Custom message");
    
    return StatusCode(response.StatusCode, response.Message);
    

    【讨论】:

    • 这行得通;但我试图避免将状态代码放入控制器中。相反,我的异常类应该抛出特定的错误代码。错误代码 - 424 是否可以放在 DependencyFailure 类中,并且我应该从控制器中做 - throw DependencyFailure("Cutom message");它仍然应该抛出 424
    • 我不这么认为。当您抛出未捕获的异常时,框架会将响应解释为服务器错误并返回 500 状态代码。您可以实现一个异常处理程序来处理您的特定异常,也可以实现您自己的控制器方法,类似于 BadRequest(...) 来返回您的状态代码。
    • 如果我想将其实现为 BadRequest(...);我怎么能这样做?当与自定义消息一起调用时,如何使我的 DependencyFailure() 类默认抛出 424
    • 您不能将其实现为 BadRequest(...),您需要编写自己的方法,例如DepedencyFailure(...) 设置状态代码并返回错误。查看github.com/aspnet/Mvc/blob/dev/src/… 以及 ContollerBase (github.com/aspnet/Mvc/blob/dev/src/…) 上的 BadRequest 方法,为您指明正确的方向
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-10-06
    • 2021-11-07
    • 2011-01-21
    • 1970-01-01
    • 2015-09-04
    • 2012-06-03
    相关资源
    最近更新 更多