2017-01-23 2 views
0

Ich versuche, eine Post-Anforderung zu senden, wie folgt: Mein Router alsAlamofire 4.3 mit Swift 3, POST-Anforderung arbeitet nicht mit URL-Parameter

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 
} 

folgt}

Dies ist, wie ich es nennen von 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) 
     } 

    } 

} 

Aber ich habe folgende Fehler wie folgt

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

Bitte beachten Sie, dass meine API-Antwort gültig ist, wenn ich mit POSTMAN und Advanced REst Client überprüft habe. Und ich habe mehrere Frage bezüglich des folgenden Fehlers versucht, aber von ihnen funktioniert in meinem Fall nicht.

Bitte kann jemand auf den Fehler hinweisen, den ich hier gemacht habe. Danke.

+0

Wenn Sie POSTMAN verwenden, verwenden Sie irgendwelche ** HTTP-Request-Header ** -Werte? – Wolverine

+0

ja ich setze Content-Type als application/x-www-form-urlencoded, trotzdem ist das Ergebnis gleich –

+0

Sie versuchen, **. Request (url: sample) ** zu verwenden. Verwenden Sie stattdessen Alamofire.request(), das ** _ url :, Methode enthält: Parameter Codierung :, Header :) ** Parameter. – Wolverine

Antwort

1

die Sie interessieren ..

Ändern Sie Web-Service-Aufruf Code wie folgt:

// 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) 
} 

Hoffe, es hilft.

+0

Vielen Dank und schätzen Sie Ihre Zeit und Mühe, aber wie ich erwähnt habe, möchte ich Router-Konzept hier mit URLRequestConvertible anwenden –

Verwandte Themen