swift - POST requests in Alamofire Parameter Encoding returning GET responses -
i'm trying make route builder in swift using alamofire (3.0) , have succeded requests, when try make post request, example, still same responses of method.
my api routes are:
/users //get -> return list of users /users //post -> create new user parameters sent when use postman works fine.
here router code:
import foundation import alamofire enum userrouter: urlrequestconvertible{ static let baseurl = nsurl(string: "http://192.168.0.106/users")! case users case createuser([string: anyobject]) case readuser(int) case updateuser(int, [string: anyobject]) case destroyuser(int) var url: nsurl { return userrouter.baseurl.urlbyappendingpathcomponent(route.path) } var route: (path: string, parameters: [string: anyobject]?) { switch self{ case .users: return ("/", nil) case .readuser(let userid): return ("/\(userid)", nil) case .createuser(let userinfo): return ("/", userinfo) case .updateuser(let userid, let userinfo): return ("/\(userid)", userinfo) case .destroyuser(let userid): return ("/\(userid)", nil) } } var method: alamofire.method{ switch self{ case .users: return .get case .readuser: return .get case .createuser: return .post case .updateuser: return .put case .destroyuser: return .delete } } var urlrequest: nsmutableurlrequest { let httprequest = nsmutableurlrequest(url: url) httprequest.httpmethod = method.rawvalue switch self{ case .createuser (let userinfo): print("creating") print(httprequest.httpmethod) //print: post on createuser, should. return alamofire.parameterencoding.json.encode(httprequest, parameters: userinfo).0 default: return alamofire.parameterencoding.url.encode(httprequest, parameters: (route.parameters ?? [ : ])).0 } } } func testroute(){ alamofire.request(userrouter.createuser(["name":"test"])).responsejson{ (response) in switch response.result{ case .success(let data): print (data) //error here, printing response instead of api response creating users (post). case .failure: print("fail") } } }
turned out problem combination of command alamofire.request() generates (curl -i -x post...) , how apache handling trailing slashes of url. when tried post "http://192.168.0.106/users" being redirect (301) get "http://192.168.0.106/users".
so had include line of command in .htaccess:
# redirect trailing slashes... rewritecond %{request_uri} !(.*)/$ rewriterule ^(.*)/$ /$1 [l,r=301] and change router's code, appending trailing slash @ end:
var route: string { switch self{ case .users: return "" case .readuser(let userid): return "/\(userid)/" case .createuser: return "/" case .updateuser(let userid): return "/\(userid)/" case .destroyuser(let userid): return "/\(userid)/" } }
Comments
Post a Comment