如何阻止 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 参数?的主要内容,如果未能解决你的问题,请参考以下文章

如何阻止我的命令行参数在 Maven 插件中被转义?

如何在 PHP 中替换/转义 U+2028 或 U+2029 字符以阻止我的 JSONP API 中断

如何在 PHP 中替换/转义 U+2028 或 U+2029 字符以阻止我的 JSONP API 中断

如何阻止 Django 转义 # 符号

如何阻止 SED 取消转义输出?

如何在切换移动导航时阻止滚动