2016-11-28 2 views
0

어쨌든 나는 쉽게 끝내야 할 REST 호출이 무엇인지에 완전히 집착했습니다. 문자열 배열을 기대하는 안정된 서비스 (노드에서)가 있습니다. 유효한 매개 변수 인 것으로 보이는 모든 것을 호출 할 때마다 서버에서 문자열을 정수로 구문 분석하려고하는 것처럼 보이는 오류가 발생합니다.이 문자열은 어딘가에서 문자열 주위의 따옴표를 잃어 버리고 있다고 생각하게 만듭니다.신속한 REST POST는 따옴표를 잃어 버리십니까?

다음은 원래 Swift (3) 코드입니다 (끝에 두 개의 변형이 추가됨). "id"와 "parmvalue"는이 함수에 전달됩니다. 나는 서버에서 500 응답을 얻을 parmvalue = "898e1ac8-4892-4e6e-89cb-4b2ea9306f75.jpg"에 전달

app.post('/path/:id/myendpoint', globals.authentication, function(req, res){ 
     var param = JSON.parse(req.param('parm', "[]")); 
     var Id = req.param('id', -1); 
...etc 

, 데이터 : 여기

let url = URL(string: "\(root)path/\(id)/myendpoint") 
var request = URLRequest(url:url!) 
request.httpMethod = "POST" 
request.addValue("application/json",forHTTPHeaderField: "Content-Type") 
let params = [ "parm" : [ parmvalue ] ] 
do { 
    let jsonParams = try JSONSerialization.data(withJSONObject: params) 
    request.httpBody = jsonParams 
    let task = URLSession.shared.dataTask(with: request, completionHandler: {(data, response, error) -> Void in 
...etc 

는 서버 코드입니다 데이터 핸들의 completionHandler에 전달 된 데이터 핸들은 다음과 같습니다.

SyntaxError: Unexpected token e

및 해당 "var param"라인에서 오른쪽을 가리키는 스택 추적. 거의 항상 반환되는 예기치 않은 토큰은 guid의 첫 번째 비 숫자 값에 해당합니다.

여기에 변형 1 (그냥 그렇게 복잡하지, json으로 하드 코딩)

let url = URL(string: "\(root)path/\(id)/myendpoint") 
var request = URLRequest(url:url!) 
request.httpMethod = "POST" 
request.addValue("application/json",forHTTPHeaderField: "Content-Type") 
let testparamsString = "{ \"photos\" : [ \"\(filename)\" ] }" 
let testparams = testparamsString.data(using: .utf8) 
request.httpBody = testparams 
...etc 

이었다 그리고 여기

let url = URL(string: "\(root)path/\(id)/myendpoint") 
var request = URLRequest(url:url!) 
request.httpMethod = "POST" 
let queryparams = "parm[]=\(filename.stringByAddingPercentEncodingForFormUrlencoded()!)" 
request.httpBody = queryparams.data(using: .utf8) 
(JSON이 작동하지 않을 경우, 쿼리 PARAM 형식을 시도) 변형이 있었다

(모든 코드 조각은 변수 이름과 값이 익명으로 처리되었으며 Swift의 3 가지 변형 모두 서버에서 동일한 응답을 생성하므로 특정 조각에서 뭔가 이상한 점이 있다면 내 익명으로 처리 한 것입니다. 손)

그냥 싱긋 웃음에 대한

, 여기이 엔드 포인트합니다 (RestSharp 라이브러리를 사용)를 호출하고 작동하는 C#을 응용 프로그램의 일부 - 내가 서버 코드가 올바른지 꽤 많은 신뢰 : 1 가까이

var request = new RestRequest($"/path/{id}/myendpoint", Method.POST); 
var parmArray = new JArray(); 
parmArray.Add(parmvalue); 
var jsonParms = JsonConvert.SerializeObject(parmArray, Formatting.None); 
request.AddParameter("parm", jsonParms); 

답변

0

변형했다 그러나 거기에 그 따옴표를 유지하려면 추가 (이스케이프 처리 된) 백 슬래시가 필요했습니다. 다음은 내가 무엇을했는지에 관한 것입니다.

let url = URL(string: "\(root)path/\(id)/myendpoint") 
    var request = URLRequest(url:url!) 
    request.httpMethod = "POST" 
    request.addValue("application/json",forHTTPHeaderField: "Content-Type") 
    let paramsString = "{ \"photos\" : \"[\\\"\(filename)\\\"]\" }" 
    request.httpBody = paramsString.data(using: .utf8) 
관련 문제