如何阻止 MOYA/Alamfire 转义我的身体 json 参数?
Posted
技术标签:
【中文标题】如何阻止 MOYA/Alamfire 转义我的身体 json 参数?【英文标题】:How do I stop MOYA/Alamfire from Escaping my body json parameters? 【发布时间】:2018-07-12 15:09:49 【问题描述】:我正在使用 Moya 和 Alamofire。它们紧密集成。但是,Moya 或 Alamofire 在 POST 请求中转义了我的 body json 参数。
我正在寻找在哪里以及如何防止这种转义发生。
例子:
"credentials":
"secret":
jJWoBkc64O0VzcjRQv4MIuQv0HgRLiNQZL7GAhtINz6EKuaK+u+YkBMi9z3v6rqLBh8TD8lIO3F+5t7iJB/FJw==
查看转义到\/FJw==
的/FJw==
【问题讨论】:
"正在逃避我的身体 json 参数" 你能更明确一点吗?你有一个简单的例子吗?转义,你的意思是不要把你的参数放在请求正文中?还是添加百分比转义字符? 您的 json 示例已损坏,但我猜您省略了双引号。在 JSON 字符串中\/
是一个有效的转义序列。你没有必要阻止它。
这是显示问题的缩短版本。我需要删除转义,因为它会干扰我正在使用的 REST 服务
如果 REST 服务不适用于有效的 JSON,它就会被破坏,这太不可思议了。还是你自己做的?为什么您认为\/
是您的 REST 服务受到干扰的原因?请提供足够的信息。
【参考方案1】:
不幸的是,这个组合现在对我有用:
struct JSONStringArrayEncoding: ParameterEncoding
func encode(_ urlRequest: URLRequestConvertible, with parameters: Parameters?) throws -> URLRequest
var urlRequest = urlRequest.urlRequest
let data = try! JSONSerialization.data(withJSONObject: parameters!, options: JSONSerialization.WritingOptions.prettyPrinted)
let json = NSString(data: data, encoding: String.Encoding.utf8.rawValue)
if let json = json
print(json)
let newJson = json.replacingOccurrences(of: "\\/", with: "/")
urlRequest?.httpBody = newJson.data(using: String.Encoding(rawValue: String.Encoding.utf8.rawValue));
return urlRequest!
然后在任务中
var task: Task
switch self
case
.postConnectAddress:
return .requestParameters(parameters: parameters! , encoding: JSONStringArrayEncoding())
【讨论】:
以上是关于如何阻止 MOYA/Alamfire 转义我的身体 json 参数?的主要内容,如果未能解决你的问题,请参考以下文章
如何在 PHP 中替换/转义 U+2028 或 U+2029 字符以阻止我的 JSONP API 中断