2015-03-06 9 views
9

Potrzebuję wykonać żądanie POST za pomocą treści HTTP z obiektem JSON, ale muszę również użyć parametrów zapytania adresu URL w tym samym żądaniu.Wiele typów kodowania dla żądania Alamofire

POST: http://www.example.com/api/create?param1=value&param2=value 
HTTP Body: { foo : [ bar, foo], bar: foo} 

Czy to jest obsługiwane przez Alamofire? Jak miałbym to zrobić?

Odpowiedz

7

Jest to zdecydowanie przydatny przypadek użycia. Wystąpiły podobne problemy z próbą dołączenia tokenów dostępu jako parametrów zapytania do żądania POST. Oto funkcja, która na pewien czas powinna nieco uprościć podejście podobne do twojego podejścia.

func multiEncodedURLRequest(
    method: Alamofire.Method, 
    URLString: URLStringConvertible, 
    URLParameters: [String: AnyObject], 
    bodyParameters: [String: AnyObject]) -> NSURLRequest 
{ 
    let tempURLRequest = NSURLRequest(URL: NSURL(string: URLString.URLString)!) 
    let URLRequest = ParameterEncoding.URL.encode(tempURLRequest, parameters: URLParameters) 
    let bodyRequest = ParameterEncoding.JSON.encode(tempURLRequest, parameters: bodyParameters) 

    let compositeRequest = URLRequest.0.mutableCopy() as NSMutableURLRequest 
    compositeRequest.HTTPMethod = method.rawValue 
    compositeRequest.HTTPBody = bodyRequest.0.HTTPBody 

    return compositeRequest 
} 

Czy to oznacza, że ​​można zadać pytanie dotyczące funkcji na urządzeniu Github? Jest to z pewnością coś, czego potrzebujemy, aby dowiedzieć się, jak ułatwić sobie w Alamofire, ponieważ jest to tak powszechny przypadek użycia. Jeśli mógłbyś podać naprawdę dobry opis twojego przypadku użycia, to jestem pewien, że zwróci to na ciebie uwagę. Na pewno pomogę nacisnąć, aby uzyskać wsparcie.

+0

Jest to podobne do sposobu, w jaki robię to poniżej. Dzięki @ popołudnie! Już napisałem problem na temat Alamofire i @mattt oświadczył, że nie planuje go wspierać i że sposób, w jaki to robimy, jest prawidłowym sposobem, aby tak się stało. – AnthonyM

+0

Hej, koleś, czy mógłbyś mnie uderzyć w numer # projektu Alamofire Github, abym mógł rzucić okiem? – cnoon

+1

# 374 https://github.com/Alamofire/Alamofire/issues/374 – AnthonyM

1

W tym momencie postanowiłem rozwiązać ten problem poprzez ręczne kodowanie NSURLRequest z parametrami adresu URL, pobieranie adresu URL z tego żądania i używanie go do utworzenia końcowego żądania. Utworzona funkcja zwraca parametr zapytania zakodowany żądanie:

private func queryParameterEncodedRequestURL(urlString: String, 
values: [String]) -> NSURL { 

    let URL = NSURL(string: urlString) 
    var request = NSURLRequest(URL: URL) 

    let parameters = [ 
    "param1": values[0]!, 
    "param2": values[1]! 
    ] 

    let encoding = Alamofire.ParameterEncoding.URL 
    (request, _) = encoding.encode(request, parameters: parameters) 

    return (request.URL, nil) 
} 

Działa to dobrze, ale na pewno będę chciał zobaczyć wsparcia Alamofire wiele typów kodowania łatwiej. To wydaje się dla mnie obejściem.

Powiązane problemy