- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
当 RxAlamofire 调用发生错误时,我需要响应正文。我见过this hack但我想知道是否有更清洁的方法。
受此启发,我创建了这个 RxAlamofire fork有一个类似的黑客。有了它,错误通常是 DataResponseError
的一个实例。所以你可以这样做:
RxAlamofire.data(method, url).subscribe(
onError: { error in
if let error = error as? DataResponseError<Data> {
// Get response body (in this case, convert it to a String)
if let data = error.response.data {
let message = String(data: data, encoding: String.Encoding.utf8)
print("Message: \(message)")
}
// Get status code
if let statusCode = error.response.response?.statusCode {
print("Status code: \(statusCode)")
}
}
}
)
最佳答案
问题描述。我正在使用 RxAlamofire 发出网络请求,我需要从错误响应的正文中获取信息。
我以以下方式进行了黑客攻击:
添加了一个 PError:
import UIKit
import Alamofire
import ObjectMapper
class PError: Error, Mappable {
var message: String?
var statusCode: Int?
required init?(map: Map) {
}
func mapping( map: Map) {
message <- map["error.message"]
statusCode <- map["error.statusCode"]
}
}
import Alamofire
import ObjectMapper
extension DataRequest {
//Overriding several methods from Alamofire Validation
@discardableResult
public func validate<S: Sequence>(statusCode acceptableStatusCodes: S) -> Self where S.Iterator.Element == Int {
return validate { [unowned self] _, response, bodyData in
return self.validate(statusCode: acceptableStatusCodes, response: response, bodyData: bodyData)
}
}
//Overriding several methods from Alamofire Validataion
fileprivate func validate<S: Sequence>(
statusCode acceptableStatusCodes: S,
response: HTTPURLResponse, bodyData: Data?)
-> ValidationResult
where S.Iterator.Element == Int
{
if acceptableStatusCodes.contains(response.statusCode) {
return .success
} else {
var error: Error = AFError.responseValidationFailed(reason: AFError.ResponseValidationFailureReason.unacceptableStatusCode(code: response.statusCode))
if let bodyData = bodyData {
if let jsonString = String(data: bodyData, encoding: .utf8) {
if let errorNew = Mapper<PError>().map(JSONString: jsonString)
{
error = errorNew
}
}
}
return .failure(error)
}
}
}
if let err = error as? PError {
status = err.message ?? "No message in the error description"
}
else
关于RxAlamofire - 如何获得错误响应?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49939309/
当 RxAlamofire 调用发生错误时,我需要响应正文。我见过this hack但我想知道是否有更清洁的方法。 受此启发,我创建了这个 RxAlamofire fork有一个类似的黑客。有了它,错
下面是RxAlamofire网络请求的示例代码。我的问题是,每当 View Controller 被关闭时,我都想取消这个请求。 我试图将此请求分配给一个全局变量,但是 requestJSON方法返回
我正在使用 RxAlamofire 下载文件。我有这样的东西: let downloadResult = download(request, to: destination) 不幸的是,downloa
我有一个简单的服务器请求,我想过滤并生成一个新的 Observable 以使用 JSON 数据验证请求。 我必须这样做,因为即使我的请求无效,我的服务器响应也会返回状态代码 200。但我可以在我的 J
我有一个应该返回 Observable 的函数。当我第一次调用该函数时,一切都很顺利,我收到了预期的结果,但第二次我想使用不同的参数发出相同的请求时,该函数会自动返回与之前相同的响应,但它不会完全激发
这是我的非响应式代码,运行良好。 函数 getLatestHtml2(){ Alamofire.request("https://www.everfest.com/fest300").response
func showImageForUrl(url: String) -> Observable> { let result = RxAlamofire .requestJSON
我创建了一个简单的项目来检查像 RxAlamofire 和 AlamofireObjectMapper 这样的库。我有一个简单的 ApiService,其中有一个端点是 PHP 脚本,它可以正常工作并
我想使用 RxAlamofire 取消之前的请求。 但是我不知道在哪里调用取消函数。 我有一个搜索栏,我在函数“textdidchange”中调用 API。 所以,我想取消之前的请求,用新的参数调用A
我正在尝试找出 API 调用中的数据来自何处。具体来说,我想知道req.user在哪里据我所知,没有参数被传递到 API 调用中。 这是服务器端代码(JS): let APIHandler = (re
我正在尝试实现最大重试次数的 alamofire 调用。代码如下: RxAlamofire.request(.post, URL, parameters: parameters, encoding:
我正在尝试使用 RxAlamofire 来包装网络请求结果。 我的目标是触发请求、处理 JSON 响应并创建包含网络操作成功或发生任何错误的 Observable。 在其他地方,我可以调用创建 Obs
我想使用 RxAlamofire 进行调用,它提供了函数 requestJson 需要两个参数 type get or post and url 但是没有参数来传递 post json body 如何
我正在 web 抓取 用户必须登录的特定网站。注销用户很简单,但注销后网站要求用户 “关闭浏览器”。如果用户只是关闭选项卡然后重新进入网站,他们将被带回登录帐户。有没有办法以某种方式模拟在 Swift
我想使用 RxAlamofire 进行 post 调用,但找不到任何方法可以做到这一点 尝试使用 requestJSON 方法但没有参数传递 post json RxAlamofire.reques
实际上我是 iOS 的新手,现在我的任务是使用 Rxalamofire 发送 URL 请求。我完全不知道 Rxalamofire。以前我只使用 alamofire。以前我只使用alamofire。现在
我是一名优秀的程序员,十分优秀!