Web API2,如何返回错误

时间:2016-06-16 10:34:56

标签: c# asp.net-web-api2

public IHttpActionResult Save(item)
{
    try
    {
        result = MyRepository.Save(item);
        return Ok(result);
    }
    catch
    {
        // What should I do here?
        // I wish to return an error response how can i do that? 
    }
}

如果它没有异常,我可以返回Ok。

但如果有例外,我该怎么办?

请注意,我有javascript客户端

4 个答案:

答案 0 :(得分:1)

创建一个模型来保存您想要返回的错误信息并传递它。

public IHttpActionResult Save(item) {
    try {
        result = MyRepository.Save(item);
        return Ok(result);
    } catch {
        // What should I do here? Create a model to hold the data you want to return
        var myErrorModel = new {
            code = "My custom error code or 500 server error code",
            message = "some friendly error message"
        };

        // I wish to return an error response how can i do that?
        var response = Request.CreateResponse(HttpStatusCode.InternalServerError, myErrorModel);
        return ResponseMessage(response);
    }
}

在错误处理程序的javascript客户端中,您可以访问模型属性并根据需要处理错误。

var handleResponse = function (data) {
    var code = data.code;
    var message = data.message
};

更新:

同意@Win,我个人不喜欢在控制器操作中执行此操作,因为这是一个跨领域的问题,并且已基本上将所有内容从catch块移动到全局错误处理程序中。

答案 1 :(得分:0)

在Web API 2中,您可以使用 BadRequest 来返回错误消息。

public IHttpActionResult Save(item)
{
    try
    {
        result = MyRepository.Save(item);
        return Ok(result);
    }
    catch
    {
        return BadRequest("Error message");
    }
}

仅供参考: 请勿使用尝试捕获阻止来吞下异常。我个人不喜欢在Action方法中使用 try catch 块。相反,我让Web API 2全局异常处理程序处理异常。这超出了原始问题的范围。

答案 2 :(得分:0)

您可以使用 HttpResponseException 发送错误消息。

public IHttpActionResult Save(item)
{
    try
    {
        result = MyRepository.Save(item);
        return Ok(result);
    }
    catch
    {
       var resp = new HttpResponseMessage(HttpStatusCode.NotFound)
        {
            Content = new StringContent(string.Format("Error Message!!"),
            ReasonPhrase = "Error Reason phrase"
        };
        throw new HttpResponseException(resp);
 
    }
}

答案 3 :(得分:0)

使用 HttpResponseException 如下:

throw new HttpResponseException(HttpStatusCode.InternalServerError)

或者另一种方式是:

var response = new HttpResponseMessage(HttpStatusCode.NotFound)  
    {  
        Content = new StringContent("some error"),  
            ReasonPhrase = "Not Found"  
    };  

    throw new HttpResponseException(response);