- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
有没有一种方法可以使用 Combine 将对象编码为 urlRequest.httpBody
或从解码为具有特定错误类型的 AnyPublisher 返回错误。
我无法让它工作,而且似乎没有使用 combine 编码对象的代码示例。必须强制将编码错误转换为 AnyPublisher 似乎不正确/不安全。
谢谢
func create(object: ExampleObject, token: Token) -> AnyPublisher<ExampleObject, API.Error> {
let url = API.EndPoint.players.url
var urlRequest = URLRequest(url: url)
urlRequest.httpMethod = "POST"
urlRequest.addValue("application/json", forHTTPHeaderField: "Content-Type")
urlRequest.addValue("Bearer \(token)", forHTTPHeaderField: "Authorization")
do {
// is there a safe combine way to encode this
urlRequest.httpBody = try JSONEncoder().encode(object)
} catch {
// Is there a better way to handle this
return error as! AnyPublisher<ExampleObject, API.Error>
}
return session
.dataTaskPublisher(for: urlRequest)
.map(\.data)
.decode(type: ExampleObject.self, decoder: JSONDecoder())
.mapError { error in
switch error {
case is URLError:
return API.Error.addressUnreachable
default:
return API.Error.invalidResponse
}
}
.eraseToAnyPublisher()
}
最佳答案
没有你的 API.Error
枚举,所以我创建了一个简单的枚举,例如
enum APIError: Error {
case encode(EncodingError)
case request(URLError)
case decode(DecodingError)
case unknown
}
func create<ExampleObject>(object: ExampleObject, token: String) -> AnyPublisher<ExampleObject, APIError> where ExampleObject: Codable {
return Just(object)
.encode(encoder: JSONEncoder())
.mapError { error -> APIError in
if let encodingError = error as? EncodingError {
return .encode(encodingError)
} else {
return .unknown
}
}
.map { data -> URLRequest in
var urlRequest = URLRequest(url: API.EndPoint.players.url)
urlRequest.httpMethod = "POST"
urlRequest.addValue("application/json", forHTTPHeaderField: "Content-Type")
urlRequest.addValue("Bearer \(token)", forHTTPHeaderField: "Authorization")
urlRequest.httpBody = data
return urlRequest
}.flatMap {
URLSession.shared.dataTaskPublisher(for: $0)
.mapError(APIError.request)
.map(\.data)
.decode(type: ExampleObject.self, decoder: JSONDecoder())
.mapError { error -> APIError in
if let decodingError = error as? DecodingError {
return .decode(decodingError)
} else {
return .unknown
}
}
}
.eraseToAnyPublisher()
}
关于swift - 在 URLRequest 中使用 Combine 将对象编码为 httpBody,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58493262/
我想创建 POST 方法的主体 Content-Type: application/x-www-form-urlencoded 我有一本字典 let params = ["key":"val","ke
我有; let parameters = [ "generalSearchInput": search, "requireAllWords":
概览 有2个URLRequest,一个有httpBody,一个没有httpBody。 然而,当比较时,它表明两者是相等的。 问题 这是预期的行为还是我遗漏了什么? 代码 let url = URL(s
我已将 Firebase 与我的 iOS 项目以及此处提到的所有必要步骤集成 https://firebase.google.com/docs/cloud-messaging/ios/client但它
这是我向服务器发送请求的操作。 let urlStr = "someurl" var request = URLRequest(url: URL(string: urlStr)!)
弄清楚了,见下文: 我正在尝试创建一个程序,可以将文本文件的内容快速传递给 http POST 请求。我正在存储在文本文件中运行的 API 查询的过滤器,并希望将它们作为 JSON 对象(?我认为,无
我想将另一个字典作为参数附加到 URLRequest 的 httpBody 请求模型: struct RequestModel: Encodable { let body: Body } st
我想使用 NSURLSessionUploadTask 和 fileUrl API 上传一个大文件。下面的代码是我写的上传一个大文件。我发现了这些问题: 在 -URLSession:task:didC
我正在创建一个演示 Web 服务代码而不使用 AFNetworking 框架。我的 HTTP Request Dictionary 中的参数。如何在 HTTPBody 上设置它? 我的代码如下 NSM
我正在尝试将项目的大部分使用 NSURLConnection 的 NSURLRequest 转换为 ASIHTTPRequest 调用。我遇到了关于在 ASIHTTPRequest 中设置 HTTPB
我正在使用名为“Poster”的 Firefox 工具来检查我的 Web 服务是否正常工作。当我发布请求时,我在要发送的内容中发送一个 JSON 对象(也调用 HTTP body data )。 当我
我正在尝试向 Twitter API 发送 POST 请求以获取 bearer_token 作为仅应用程序身份验证的一部分。我已经按照他们的文档 ( https://dev.twitter.com/o
我有我的 NSURLProtocol MyGreatProtocol。我将它添加到 URL 加载系统, NSURLProtocol.registerClass(MyGreatProtocol) 然后我
我需要使用 HTTPBody of Array 向我的服务器发送一个发布请求。这是我的参数数组: params = [ "message" : [
我正在向某个 URL 发帖,我的 webDev 告诉我需要设置 "data=" 作为参数,我的 JSONObject 作为键。我不知道如何将字符串设置为参数。 我尝试在 request.httpBod
如何使用 alamofire 多部分请求 Swift 打印 HTTPBody 现在我正在尝试使用下面的代码,但应用程序在此行崩溃 print("HTTP Body \(String(data: (re
我试图在 Objective-C 的 POST 请求上传递两个不同的参数。 第一个参数应该放在 Header 上,另一个应该放在 Body 上。 NSDictionary *headerParams
我正在对服务器进行 POST 调用,但 Alamofire 始终将正文作为 JSON 而不是作为编码的表单 URL 发送,我知道为了对正文进行编码,我必须插入 data(使用: .utf8, allo
我在请求中传递了 HTTPBody。但无法得到应有的回应。 下面是我的代码: NSURL *url = [NSURL URLWithString:@"https://sample.ios.com/l1
有没有一种方法可以使用 Combine 将对象编码为 urlRequest.httpBody 或从解码为具有特定错误类型的 AnyPublisher 返回错误。 我无法让它工作,而且似乎没有使用 co
我是一名优秀的程序员,十分优秀!