c# - Web API 将自定义异常抛回给客户端

标签 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...

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

如何最好地将这些异常返回给客户端以及客户端将如何检查响应是我的自定义异常、另一个异常还是只是一条文本消息?

最佳答案

要回答问题的第一部分……返回异常的正确方法是使用 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();

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

关于c# - Web API 将自定义异常抛回给客户端,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26718868/

相关文章:

c# - MVVM Light EventToCommand无法拦截UserControl事件的问题

c# - Find 和 FindAsync 之间的区别

C#抑制多只鼠标的鼠标点击

angularjs - 即使在成功调用 api 后,.NET Core web api 也会出现 CORS 错误

javascript - 需要使用 jQuery Ajax 使用 Web API - 跨源资源共享 (CORS) 问题

c# - 无法选择数据绑定(bind)的 DataGridView 中的复选框

c# - 在 systemd 文件中使用 Environment= 解析 ASP.NET Core 连接字符串

asp.net-web-api - 如何设置 ASP.NET Web Api 路由约束 HTTP 状态返回代码

c# - Web Api 请求抛出 "Error while copying content to a stream."

c# - Web Api 中的 Unity Container PerRequestLifetimeManager