Web API将自定义异常返回给客户端

时间:2014-11-03 16:46:26

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

目前,我正在执行以下操作,将错误消息发送回客户端:

HttpResponseMessage message = new HttpResponseMessage(HttpStatusCode.Forbidden)
{
    ReasonPhrase = "No rights to access this resource",
};

throw new HttpResponseException(message);

但是,我想通过发回自定义异常来进一步改进响应。所以我可以这样:

public class MyAppException : Exception {}

public class NoRightsException : MyAppException {}
public class SaveException : MyAppException {}    
//etc...

我的所有例外都将在一个单独的程序集中,服务器和客户端都将引用它。

如何最好地将这些异常返回给客户端,以及客户端如何检查响应是我的自定义异常,另一个异常还是简单的短信?

1 个答案:

答案 0 :(得分:1)

回答问题的第一部分..返回异常的正确方法是使用Request.CreateErrorResponse。此方法有许多重载,其中一个重载将异常作为参数。在你的情况下,你可能会......

Request.CreateErrorResponse(HttpStatusCode.BadRequest, new NoRightsException());

更新

虽然您没有说明您的客户端方法是什么,但我将假设您正在使用HttpClient。如果是这种情况,你应该拨打一个类似的电话......

var client = new HttpClient();

var task = client.PostAsync(url)
            .ContinueWith(response =>
            {
                response.Result.EnsureSuccessStatusCode();
            });

task.Wait();

在这种情况下,您将在响应类中找到文本或异常