Alamofire Accept and Content-Type JSON

后端 未结 5 1063
心在旅途
心在旅途 2020-12-29 09:48

I\'m trying to make a GET request with Alamofire in Swift. I need to set the following headers:

Content-Type: application/json
Accept: application/json


        
相关标签:
5条回答
  • 2020-12-29 09:56

    Try this:

    URLRequest.setValue("application/json",
                        forHTTPHeaderField: "Content-Type")
    URLRequest.setValue("application/json",
                        forHTTPHeaderField: "Accept")
    
    0 讨论(0)
  • 2020-12-29 09:57
    Alamofire.request(url, method: .post, parameters:parameters, encoding: JSONEncoding.default).responseJSON { response in
         ...      
    }
    

    it's work

    0 讨论(0)
  • 2020-12-29 10:01

    Simple way to use get method with query map and response type json

    var parameters: [String:Any] = [
                "id": "3"  
            ]
    var headers: HTTPHeaders = [
                "Content-Type":"application/json",
                "Accept": "application/json"
            ]
    Alamofire.request(url, method: .get,
     parameters: parameters,
    encoding: URLEncoding.queryString,headers:headers)
    .validate(statusCode: 200..<300)
                .responseData { response in     
                    switch response.result {
                    case .success(let value):  
                    case .failure(let error):    
                    }
    
    0 讨论(0)
  • 2020-12-29 10:07

    I ended up using URLRequestConvertible https://github.com/Alamofire/Alamofire#urlrequestconvertible

    enum Router: URLRequestConvertible {
        static let baseUrlString = "someUrl"
    
        case Get(url: String)
    
        var URLRequest: NSMutableURLRequest {
            let path: String = {
                switch self {
                case .Get(let url):
                    return "/\(url)"
                }
            }()
    
            let URL = NSURL(string: Router.baseUrlString)!
            let URLRequest = NSMutableURLRequest(URL:
                               URL.URLByAppendingPathComponent(path))
    
            // set header fields
            URLRequest.setValue("application/json",
                                forHTTPHeaderField: "Content-Type")
            URLRequest.setValue("application/json",
                                forHTTPHeaderField: "Accept")
    
            return URLRequest.0
        }
    }
    

    And then just:

    Alamofire.request(Router.Get(url: ""))
        .validate()
        .responseJSON { (req, res, json, error) in
            if (error != nil) {
                NSLog("Error: \(error)")
                println(req)
                println(res)
            } else {
                NSLog("Success")
                var json = JSON(json!)
                NSLog("\(json)")
            }
    }
    

    Another way to do it is to specify it for the whole session, check @David's comment above:

    Alamofire.Manager.sharedInstance.session.configuration
             .HTTPAdditionalHeaders?.updateValue("application/json",
                                                 forKey: "Accept")
    
    0 讨论(0)
  • 2020-12-29 10:10

    Example directly from Alamofire github page:

    Alamofire.request(.GET, "http://httpbin.org/get", parameters: ["foo": "bar"])
             .validate(statusCode: 200..<300)
             .validate(contentType: ["application/json"])
             .response { (_, _, _, error) in
                      println(error)
             }
    

    In your case add what you want:

    Alamofire.request(.GET, "http://httpbin.org/get", parameters: ["foo": "bar"])
             .validate(statusCode: 200..<300)
             .validate(contentType: ["application/json"])
             .validate(Accept: ["application/json"])
             .response { (_, _, _, error) in
                      println(error)
             }
    
    0 讨论(0)
提交回复
热议问题