どうにかして、簡単なREST呼び出しが何であるべきかを完全に突き止めました。私は文字列の配列を期待している(ノード内の)安らかなサービスを持っています。私が有効なパラメータと思われるものを呼び出すたびに、文字列をパースして整数型として解析しようとしていたようなエラーがサーバーから発生し、文字列のどこかで引用符が失われていると考えられます。早送りREST POSTで引用符が失われましたか?
ここには元のSwift(3)コード(最後に2つの亜種があります)があります。 "id"と "parmvalue"がこの関数に渡されます。
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
ここでは、サーバーのコードです:= "898e1ac8-4892-4e6e-89cb-4b2ea9306f75.jpg" parmvalueに渡す
app.post('/path/:id/myendpoint', globals.authentication, function(req, res){
var param = JSON.parse(req.param('parm', "[]"));
var Id = req.param('id', -1);
...etc
が、私は、サーバーからの500応答を取得し、データ
SyntaxError: Unexpected token e
とその「VaRのPARAM」の行で右を向いスタックトレース:dataTaskためcompletionHandlerに渡さは次のようになります。ほとんどの場合、返される予期しないトークンは、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
でしたそして、ここでバリアント2(JSONが動作しない場合は、クエリのparamフォーマットを試してみてください)
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)
ました
(すべてのコード断片は、変数名と値が多少匿名化されていますが、Swiftの3つのバリエーションはすべて同じ応答をサーバーから生成するため、特定の断片に何か不具合がある場合は、手)
0123ただ、にやにや笑いのためは、ここにも、このエンドポイント(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);