2017-01-23 13 views
0

で作業していない、私のルータスウィフト3とAlamofire 4.3、POSTリクエストは、私は次のようにPOSTリクエストを送信しようとしていますURLパラメータ

enum ProfieRouter: URLRequestConvertible { 

case loginUser(parameters: Parameters) 
case resetPassword(parametrs: Parameters) 

var method: HTTPMethod { 

    switch self { 

    case .loginUser: 
     return .post 

    case .resetPassword: 
     return .post 
    } 
} 

var path: String { 

    switch self { 
    case .loginUser: 
     return "app/api.php?request=login" 

    case .resetPassword: 
     return "app/api.php?request=forgettenPassword" 
    } 
} 

func asURLRequest() throws -> URLRequest { 
    let BASEURL = "https://www.example.com/" 
    let url = try BASEURL.asURL() 
    var urlRequest = URLRequest(url: url.appendingPathComponent(path)) 
    urlRequest.httpMethod = method.rawValue 


    switch self { 

    case .loginUser(let parameters): 
     urlRequest = try URLEncoding.default.encode(urlRequest, with: parameters) 

    case .resetPassword(let parameters): 
     urlRequest = try URLEncoding.default.encode(urlRequest, with: parameters) 
    } 
    return urlRequest 
} 

}

を次のようにこれは私がそれを呼び出す方法ですViewControllerから、

@IBAction func signInButtonClicked(_ sender: Any) { 

    let parameters: Parameters = [ 
     "email": "xxxxxx", 
     "password": "xxxxxx" 
    ] 

    Alamofire.request(ProfieRouter.loginUser(parameters: parameters)).responseJSON{ response in 


     switch response.result { 
     case .success: 
      print(response) 

      break 
     case .failure(let error): 

      print(error) 
     } 

    } 

} 

しかし、次のように、私はエラーを次しまった、

responseSerializationFailed(Alamofire.AFError.ResponseSerializationFailureReason.jsonSerializationFailed(Error Domain=NSCocoaErrorDomain Code=3840 "Invalid value around character 0." UserInfo={NSDebugDescription=Invalid value around character 0.})) 

私のAPIの応答は、POSTMANとAdvanced REst Clientでチェックしたときに有効です。と私はいくつかの質問を次のエラーについては試してみましたが、私の場合はそれらの仕事はありません。

私がここで行った間違いを指摘できますか? ありがとうございます。

+0

POSTMANを使用する場合は、** HTTPリクエストヘッダー**の値を使用しますか? – Wolverine

+0

はい私はContent-Typeをapplication/x-www-form-urlencodedに設定しましたが、結果は同じです –

+0

**リクエスト(url:sample)**を使用しようとしています。 ** _ url :, メソッドを含むAlamofire.request()を使用する代わりに、 パラメータ エンコーディング:, ヘッダー:) **パラメータ。 – Wolverine

答えて

1

はこれを試してみてください。..

このようなWebサービスを呼び出すコードあなたを変更します。

// Add default headers if needed.(As per your web-service requirement) 
let headers: HTTPHeaders = [ 
    "Accept": "text/html", 
    "Content-Type" : "application/x-www-form-urlencoded" 
] 

Alamofire.request("Your URL", method: .post, parameters: parameters, encoding: URLEncoding.httpBody, headers: headers).validate().responseJSON { (response) in 

    debugPrint(response) 
} 

はそれがお役に立てば幸いです。

+0

時間と労力を感謝しますが、私が言及したように、ここではURLRequestConvertible –

関連する問題