如何在asp.net webapi中从异步中返回异常

时间:2017-06-26 15:51:23

标签: asp.net-web-api model-view-controller exception-handling

我有一个WebAPI2 mvc应用程序,我正在做Get / Post到另一个api。我的代码如下所示

   public Task<SomeEntity> AddAsync(SomeEntity someEntity)
    {
        try
        {
            var response = apiService.PostItem(url, someEntity);

            if (response == null || response!="Successful")
            {
                throw new InvalidOperationException(response);
            }
        }
        catch (Exception ex)
        {
            _logger.Error("Error " + ex.Message);

            // how to return this error or exception;

        }
        return Task.FromResult(someEntity);
    }

如果对内部api的调用返回异常字符串,那么我需要从此方法调用转发它。任何想法我该怎么办?感谢

1 个答案:

答案 0 :(得分:0)

您可以使用IHttpActionResult或HttpResponseMessage作为返回类型并返回正确的HTTP状态代码。如果发生异常,您可以返回[如果您返回IHttpActionResult]

public IHttpActionResult Error()
{
    var error = new HttpError();
    return ResponseMessage(Request.CreateErrorResponse(HttpStatusCode.BadRequest, error));
}

或者在您的示例中,使用适当的状态代码抛出HttpResponseException。

public Product GetProduct(int id)
{
    Product item = repository.Get(id);
    if (item == null)
    {
        var message = string.Format("Product with id = {0} not found", id);
        throw new HttpResponseException(
            Request.CreateErrorResponse(HttpStatusCode.NotFound, message));
    }
    else
    {
        return item;
    }
}