RestSharp - 如何处理非 200 响应? RestClient 在执行时抛出异常

2024-04-03

我在 Windows Phone 8.1 应用程序中使用 RestSharp。当服务器返回代码不同于 200 的响应时,RestClient 会抛出异常。Wiki https://github.com/restsharp/RestSharp/wiki/Getting-Started说我应该得到正确状态代码的响应。我想获取响应内容,因为服务器返回错误消息。

private async Task<T> ExecuteAsync<T>(IRestRequest request)
    {
        if (!_networkAvailableService.IsNetworkAvailable)
        {
            throw new NoInternetException();
        }

        request.AddHeader("Accept", "application/json");

        IRestResponse<T> response;
        try
        {
            response = await _client.Execute<T>(request); //here I get exception
        }
        catch (Exception ex)
        {
            throw new ApiException();
        }

        HandleApiException(response);

        return response.Data;
    }

    private void HandleApiException(IRestResponse response)
    {
        if (response.StatusCode == HttpStatusCode.OK)
        {
            return;
        }
//never reach here :( 
        ApiException apiException;
        try
        {
            var apiError = _deserializer.Deserialize<ApiErrorResponse>(response);
            apiException = new ApiException(apiError);
        }
        catch (Exception)
        {
            throw new ApiException();
        }

        throw apiException;
    }

服务器响应示例:

HTTP/1.1 400 Bad Request
Cache-Control: no-cache
Pragma: no-cache
Content-Length: 86
Content-Type: application/json;charset=UTF-8
Expires: -1
Server: Microsoft-IIS/8.0
Access-Control-Allow-Origin: *
X-Powered-By: ASP.NET
Date: Mon, 28 Sep 2015 12:30:10 GMT
Connection: close

{"error":"invalid_token","error_description":"The user name or password is incorrect"}

如果您在 Windows Phone 8.1 下工作,则您正在使用 RestSharp Portable (https://github.com/FubarDevelopment/restsharp.portable https://github.com/FubarDevelopment/restsharp.portable) (大概)。 用这个:

var client = new RestClient();
client.IgnoreResponseStatusCode = true;

这样,您就不会遇到 404 等异常。 我希望这会有所帮助:)

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

RestSharp - 如何处理非 200 响应? RestClient 在执行时抛出异常 的相关文章

  • 在 C 语言中,为什么数组的地址等于它的值?

    在下面的代码中 指针值和指针地址与预期不同 但数组值和地址则不然 怎么会这样 Output my array 0022FF00 my array 0022FF00 pointer to array 0022FF00 pointer to a
  • 在 C++ 代码中转换字符串

    我正在学习 C 并开发一个项目来练习 但现在我想在代码中转换一个变量 字符串 就像这样 用户有一个包含 C 代码的文件 但我希望我的程序读取该文件并插入将其写入代码中 如下所示 include
  • 在 Mono 中反序列化 JSON 数据

    使用 Monodroid 时 是否有一种简单的方法可以将简单的 JSON 字符串反序列化为 NET 对象 System Json 只提供序列化 不提供反序列化 我尝试过的各种第三方库都会导致 Mono Monodroid 出现问题 谢谢 f
  • 用于在标头更改时重新编译的简单 C 项目的示例 makefile

    有谁有完整的 makefile 可以执行以下操作 如果 HEADER 文件发生更改 则重建项目 cpp 文件在 makefile 中列出 头文件未在 makefile 中列出 头文件允许与 cpp 文件具有不同的名称 部分cpp文件没有头文
  • JavaScript 错误:MVC2 视图中的条件编译已关闭

    我试图在 MVC2 视图页面中单击时调用 JavaScript 函数 a href Select a JavaScript 函数 function SelectBenefit id code alert id alert code 这里 b
  • 测量进程消耗的 CPU 时钟

    我用 C 语言编写了一个程序 它是作为研究结果创建的程序 我想计算程序消耗的确切 CPU 周期 精确的循环次数 知道我怎样才能找到它吗 The valgrind tool cachegrind valgrind tool cachegrin
  • 如何在 Javascript 中连接 C# ActiveX 事件处理程序

    我尝试使用几个代码片段将 ActiveX 对象与 Javascript 事件处理程序挂钩 我无法确定为什么事件处理程序没有被调用 带有项目的 Github 存储库 https github com JesseKPhillips Csharp
  • 在 azure blob 存储中就地创建 zip 文件

    我将文件存储在 Blob 存储帐户内的一个容器中 我需要在第二个容器中创建一个 zip 文件 其中包含第一个容器中的文件 我有一个使用辅助角色和 DotNetZip 工作的解决方案 但由于 zip 文件的大小最终可能达到 1GB 我担心在进
  • 对于 C# Express 用户来说,有哪些好的工具可以识别可能重复的代码? [关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 也可以看看 有什么工具可以检查重复的 VB NET 代码吗 https stackoverflow c
  • 如何在多线程应用程序中安全地填充数据并 Refresh() DataGridView?

    我的应用程序有一个 DataGridView 对象和一个 MousePos 类型的列表 MousePos 是一个自定义类 它保存鼠标 X Y 坐标 类型为 Point 和该位置的运行计数 我有一个线程 System Timers Timer
  • MySQL 连接器 C++ 64 位在 Visual Studio 2012 中从源代码构建

    我正在尝试建立mySQL 连接器 C 从源头在视觉工作室2012为了64 bit建筑学 我知道这取决于一些boost头文件和C 连接器 跑步CMake生成一个项目文件 但该项目文件无法编译 因为有一大堆非常令人困惑的错误 这些错误可能与包含
  • SQLAPI++ 的免费替代品? [关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 是否有任何免费 也许是开源 的替代品SQLAPI http www sqlapi com 这个库看起来
  • 当Model和ViewModel一模一样的时候怎么办?

    我想知道什么是最佳实践 我被告知要始终创建 ViewModel 并且永远不要使用核心模型类将数据传递到视图 这就说得通了 让我把事情分开 但什么是Model 和ViewModel一模一样 我应该重新创建另一个类还是只是使用它 我觉得我应该重
  • Xamarin Forms Binding - 访问父属性

    我无法访问页面的 ViewModel 属性以便将其绑定到 IsVisible 属性 如果我不设置 BindingContext 我只能绑定它 有没有办法可以在设置 BindingContext 的同时访问页面的 viewmodel root
  • 如何在C#中控制datagridview光标移动

    我希望 datagridview 光标向右移动到下一列 而不是在向单元格输入数据后移动到下一行 我试图通过 dataGridView1 KeyDown 事件捕获键来控制光标 但这并不能阻止光标在将数据输入到单元格后移动到下一行 提前感谢你的
  • 在 C# 的 WebAPI 中的 ApiController 上使用“传输编码:分块”提供数据

    我需要服务分块传输使用编码数据API控制器 因为我无权访问HttpContext or the Http请求 我有点不知道在哪里写入响应以及在哪里刷新它 设置如下 public class MyController ApiControlle
  • 如何高效计算连续数的数字积?

    我正在尝试计算数字序列中每个数字的数字乘积 例如 21 22 23 98 99 将会 2 4 6 72 81 为了降低复杂性 我只会考虑 连续的数字 http simple wikipedia org wiki Consecutive in
  • Streamwriter 覆盖 txt 文件中的文本

    有没有什么方法可以重新打开流写入器而不创建新的写入对象 因为此时 当调用 WriteOdd 时 streamwriter 正在覆盖在它之前调用的 WriteEven public void WriteEven StreamWriter wr
  • ContentDialog Windows 10 Mobile XAML - 全屏 - 填充

    我在项目中放置了一个 ContentDialog 用于 Windows 10 上的登录弹出窗口 当我在移动设备上运行此项目时 ContentDialog 未全屏显示 并且该元素周围有最小的填充 在键盘上可见 例如在焦点元素文本框上 键盘和内
  • 嵌入式linux编写AT命令

    我在向 GSM 模块写入 AT 命令时遇到问题 当我使用 minicom b 115200 D dev ttySP0 term vt100 时它工作完美 但我不知道如何在 C 代码中做同样的事情 我没有收到任何错误 但模块对命令没有反应 有

随机推荐

  • SQLite 并插入 UTC 格式的当前日期

    如何在 sqlite 数据库上使用 SQL 语句插入 UTC 格式的当前日期 我找到了NOW函数 但它的格式是什么 这将在移动设备上进行 因此每个人都会有不同的区域设置 但是 我需要标准时间格式 因为设备会将日期与我的服务器进行比较 另外
  • Python - DM 用户 Discord 机器人

    我正在 Python 中开发一个 User Discord 机器人 如果机器人所有者输入 DM user然后机器人会私信所有者提到的用户 client event async def on message message if messag
  • 是否可以在同一个 html 页面中多次使用相对位置?

    我在主页上使用 相对位置 和 绝对位置 我有一个使用上述母版页的页面 并且我尝试在此页面中再次对其他 2 个元素使用 相对位置 和 绝对位置 但该页面中下面的元素 绝对位置 是不是根据其上方的元素放置的 相对位置 而是指母版页中元素的 相对
  • 如何在 JavaFX 中将 GUI 覆盖到 3D 场景上?

    我在 JavaFX 中有一个 3D 场景 需要在 3D 场景上覆盖 GUI 我尝试向场景添加按钮和文本 但它们始终作为 3D 对象出现在 3D 视图中 我环顾四周 没有找到该怎么做 唯一的解决方法是创建一个全新的窗口并将设置放在那里 但在这
  • Android Facebook - 获取空个人资料

    第一次使用 Facebook SDK 我无法获取用户个人资料 它始终为空 怎么了 btnFbWidget LoginButton findViewById R id btnFbWidget btnFbWidget setReadPermis
  • 删除indexedDB对象存储中特定索引值的所有记录

    对于数组键为的对象存储 a b where a也是一个索引 有没有更有效的方法来删除特定值的所有记录a而不是在索引上打开游标a并通过光标逐步删除每条记录 有没有办法只为索引定义键范围 或者只为索引定义键范围a然后离开b打开任何值 以便可以删
  • 如何在 AngularJS 和 Jasmine 中对 $http 进行单元测试

    这是我的代码 因为代码很长 所以我做了一个 Plunker describe create function it Should be defined function expect BaseService create toBeDefin
  • 导入特定于版本的 python 模块的最佳方法

    对于在特定于版本的 python 中导入模块 哪种方法最有意义 我的用例是 我正在编写将部署到 python 2 3 环境中的代码 并在几个月内升级到 python 2 5 这 if sys version info 2 gt 2 5 fr
  • 复制到剪贴板需要花费大量时间

    我有以下代码将 25MB 的数据复制到剪贴板 star time after populating HTML and Text const start time new Date getTime navigator clipboard wr
  • Applescript 将启动 Chrome(具体内容)

    我真的很难创建一些在 osx 上启动浏览器窗口 chrome 的方法 具体细节包括窗口大小 没有选项卡等 传统上 我通过带有 IE 的窗口使用 vb 脚本 这是一个非常简单的练习 但我 我将是第一个承认的人 当谈到 Mac 时 我感到非常挣
  • Rails 3 ActiveRecord .skip_callback 线程安全

    这段代码线程安全吗 MyModel skip callback save before my callback my model instance update attributes attributes MyModel set callb
  • 错误:(9, 5) 错误:找不到资源 android:attr/dialogCornerRadius

    所以我安装了 android studio 3 0 1 一旦打开构建的 gradle 并显示以下错误 我尝试添加设计和支持等依赖项 但徒劳无功 有人可以帮助我吗 它显示了一些属性 例如dialogCornerRadius and fontV
  • 将字符串转换为代码隐藏中的可执行 C# 代码[重复]

    这个问题在这里已经有答案了 可能的重复 在 C 4 0 中执行字符串 https stackoverflow com questions 760088 execute a string in c sharp 4 0 我怎样才能让这个字符串执
  • 使用 Cocoa 获取当前播放的歌曲

    有没有一种方法 当然有一种方法 但哪种方法 以编程方式获取 Mac OS 10 5 8 和 OS 10 6 上 iTunes 中当前播放的歌曲的信息 我的 Cocoa 应用程序需要这个 我使用 iTunes 8 和 Objective C
  • 是否可以使用 AndroidAnnotations 注入模拟以进行测试?

    我还没有找到任何关于如何执行此操作的示例 我假设基于这样的例子这是不可能的 Bean MyImplementation class MyInterface myInterface 其中要注入的类已经确定 的补充johncarl answer
  • 在线视频流

    我想制作一个视频网站 我们可以在其中上传任何格式的视频并像 youtube 一样显示 我怎样才能做到这一点 我的整个网站都是用 PHP 编写的 我是视频流 SP 的新手 请描述一下您的答案 Thanks 首先你需要一个用Flash Acti
  • 如何在 SWIFT 3 中将 HTTPS 代理添加到 NSURLSession

    我使用以下代码连接到代理服务器 并且仅适用于 HTTP 请求 但不适用于 HTTPS 在 iOS 9 0 中 kCFStreamPropertyHTTPSProxyHost and kCFStreamPropertyHTTPSProxyPo
  • 为什么运行hadoop时数据节点会关闭?

    我在 VirtualBox 的 ubuntu 11 0 4 上安装了 hadoop 1 0 4 与我的主机名相同 不知何故数据节点关闭 在日志文件中出现以下错误 STARTUP MSG Starting DataNode STARTUP M
  • C++11 中的并发阻塞队列

    对于线程之间传递的消息 我正在寻找具有以下属性的并发队列 有界尺寸 pop 方法会阻塞 等待直到元素可用 abort 方法取消等待 可选 优先 多个生产者 一个消费者 The concurrent bounded queueTBB 会提供这
  • RestSharp - 如何处理非 200 响应? RestClient 在执行时抛出异常

    我在 Windows Phone 8 1 应用程序中使用 RestSharp 当服务器返回代码不同于 200 的响应时 RestClient 会抛出异常 Wiki https github com restsharp RestSharp w