Web Api 异常处理

Web Api Exception Handling

在我的应用程序中,我正在尝试使用异常处理。我想做的是创建一个单独的 class 并将其从 HttpResponseException.

扩展

这是我写到现在的代码,

public class ApiExceptions : HttpResponseException
{
    public ApiExceptions(string reason, HttpStatusCode code)
    {
        var response = new HttpResponseMessage
        {
            StatusCode = code,
            ReasonPhrase = reason,
            Content = new StringContent(reason)
        };
        throw new HttpResponseException(response);
    }
}

但是我收到了这个错误,

'System.Web.Http.HttpResponseException' does not contain a constructor that takes 0 arguments

我对 C# 中的异常处理非常陌生。我真的很感激在这方面的帮助。

HttpResponseExceptionclasshas two constructors defined,两者都需要一个值:

HttpResponseException(HttpResponseMessage)
HttpResponseException(HttpStatusCode)

因为您的 ApiExceptions class 继承自 HttpResponseException,它必须提供兼容的构造函数。由于 class 所做的只是 return HttpResponseException,它似乎根本没有必要从 class 继承。

下面的代码应该可以工作

: base(...)

如果您省略对基本构造函数的调用,它将自动调用默认的基本构造函数,并且 HttpResponseException 不会没有参数。

 public class ApiExceptions : HttpResponseException
        {
            public ApiExceptions(string reason, HttpStatusCode code):base(code)
            {
                var response = new HttpResponseMessage
                {
                    StatusCode = code,
                    ReasonPhrase = reason,
                    Content = new StringContent(reason)
                };
                throw new HttpResponseException(response);
            }
        }

无论如何我不确定你为什么需要扩展 HttpResponseException

如果你想从 HttpResponseException 派生,你应该使用类似于这样的代码:在这个例子中是一个自定义异常,return BadRequest 类型异常和一个自定义消息。

 public class HttpResponseBadRequestException: HttpResponseException
{
    /// <summary>
    /// Basic
    /// </summary>
    public HttpResponseBadRequestException()
        : this(string.Empty)
    {
    }

    /// <summary>
    /// Specific Constructor. Use this to send a Bad request exception
    /// with a custom message
    /// </summary>
    /// <param name="message">The message to be send in the response</param>
    public HttpResponseBadRequestException(string message)
        : base(new HttpResponseMessage(HttpStatusCode.BadRequest) {
            Content = new StringContent(message) })
    {
    }
}