Added extraEncodedParameters
This commit is contained in:
parent
e741805f35
commit
bed4b5c837
@ -58,6 +58,7 @@ extern NSString * const KeyCallNumber;
|
|||||||
extern NSString * const KeyPhoneNumber;
|
extern NSString * const KeyPhoneNumber;
|
||||||
extern NSString * const KeyPresentationStyle;
|
extern NSString * const KeyPresentationStyle;
|
||||||
extern NSString * const KeyExtraParameters;
|
extern NSString * const KeyExtraParameters;
|
||||||
|
extern NSString * const KeyExtraEncodedParameters;
|
||||||
extern NSString * const KeyContextRoot;
|
extern NSString * const KeyContextRoot;
|
||||||
|
|
||||||
extern NSString * const KeyType;
|
extern NSString * const KeyType;
|
||||||
|
|||||||
@ -58,6 +58,7 @@ NSString * const KeyCallNumber = @"callNumber";
|
|||||||
NSString * const KeyPhoneNumber = @"phoneNumber";
|
NSString * const KeyPhoneNumber = @"phoneNumber";
|
||||||
NSString * const KeyPresentationStyle = @"presentationStyle";
|
NSString * const KeyPresentationStyle = @"presentationStyle";
|
||||||
NSString * const KeyExtraParameters = @"extraParameters";
|
NSString * const KeyExtraParameters = @"extraParameters";
|
||||||
|
NSString * const KeyExtraEncodedParameters = @"extraEncodedParameters";
|
||||||
NSString * const KeyContextRoot = @"appContext";
|
NSString * const KeyContextRoot = @"appContext";
|
||||||
|
|
||||||
NSString * const KeyType = @"type";
|
NSString * const KeyType = @"type";
|
||||||
|
|||||||
@ -53,7 +53,7 @@ extension JSONDictionary {
|
|||||||
return string
|
return string
|
||||||
}
|
}
|
||||||
|
|
||||||
public func toUrlQueryItems() throws -> [URLQueryItem] {
|
public func toUrlQueryItems(shouldRemoveEncoding: Bool = true) throws -> [URLQueryItem] {
|
||||||
var queryItems: [URLQueryItem] = []
|
var queryItems: [URLQueryItem] = []
|
||||||
for (key, value) in self {
|
for (key, value) in self {
|
||||||
var valueString: String
|
var valueString: String
|
||||||
@ -62,24 +62,13 @@ extension JSONDictionary {
|
|||||||
} else if let value = value as? JSONArray {
|
} else if let value = value as? JSONArray {
|
||||||
valueString = try value.toJSONString()
|
valueString = try value.toJSONString()
|
||||||
} else {
|
} else {
|
||||||
guard let baseValueString = String(describing: value.base).removingPercentEncoding else {
|
valueString = String(describing: value.base)
|
||||||
throw JSONError.error(message: "query item failed: \(key) value \(value.base)")
|
if shouldRemoveEncoding {
|
||||||
|
guard let encodedValue = valueString.removingPercentEncoding else { throw JSONError.error(message:"query item failed: \(key) value \(value.base)") }
|
||||||
|
valueString = encodedValue
|
||||||
}
|
}
|
||||||
valueString = baseValueString
|
|
||||||
}
|
}
|
||||||
/*If urlQuery value contains '/' , ':' these characters are passed without encoding, due to this we are seeing inconsistent behaviour.
|
let queryItem = URLQueryItem(name: key, value: valueString)
|
||||||
For Eg: value contains a url: https://vzwsso/executeTask
|
|
||||||
Expected: https%3A%2F%2Fvzwsso%2FexecuteTask
|
|
||||||
Current: https://vzwsso/executeTask
|
|
||||||
So removed possible characters from urlQueryAllowed characterSet.
|
|
||||||
*/
|
|
||||||
var characterSet = CharacterSet.urlQueryAllowed
|
|
||||||
characterSet.remove("/")
|
|
||||||
characterSet.remove(":")
|
|
||||||
characterSet.remove("?")
|
|
||||||
characterSet.remove("=")
|
|
||||||
characterSet.remove("&")
|
|
||||||
let queryItem = URLQueryItem(name: key, value: valueString.addingPercentEncoding(withAllowedCharacters: characterSet) ?? valueString)
|
|
||||||
queryItems.append(queryItem)
|
queryItems.append(queryItem)
|
||||||
}
|
}
|
||||||
return queryItems
|
return queryItems
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user