Fakhar Zaman
Fakhar Zaman

Reputation: 71

Alamofire - Rest API call with Custom Header

I'm working with Swift + Alamofire. I'm consuming a Rest API which returns data in JSON format and I've tested it in Rest API Testing tool i.e. PostMan. Here is it's snapshot and it's working fine

Snapshot from PostMan

The only thing is Authorization Header in this Get request.But same isn't working in Swift+Alamofire. Here goes the code snippet.

let requestHeaders: HTTPHeaders = [
            "Authorization": "bearer " + (Session.user?.accessToken!)!
        ]
Alamofire.request("http://abcabc.com/api/StoreType/Stores", headers: requestHeaders).responseJSON { (response) -> Void in

            switch response.result {
            case .success:
                guard let rawJson = response.result.value as? [String: Any] else {

                    let serverError = NSError(domain: "Server error", code: (response.response?.statusCode)!, userInfo: ["msg": "Received Malformed data from server"])
                    errorBlock(serverError)
                    return
                }

                let formattedJson = JSON(rawJson)
                if (formattedJson["Message"] != JSON.null) {

                    let serverError = NSError(domain: "Server error", code: (response.response?.statusCode)!, userInfo: ["msg": formattedJson["Message"]])
                    errorBlock(serverError)
                } else { // No error case

                    Session.storeCategories = StoreCategory.initializeStoreCategoriesWithStores(storeCategoryList: formattedJson)
                    successBlock(formattedJson)
                }
            case .failure(let error):
                errorBlock(error)
            }
        }

But I get following error always. (Snapshot from Xcode)

enter image description here

Upvotes: 0

Views: 659

Answers (3)

Jamil Hasnine Tamim
Jamil Hasnine Tamim

Reputation: 4448

Try this, and for response class mapping from json you can use Codable or ObjectMapper

var headers = ["":""]
headers["Authorization"] = "bearer " + (Session.user?.accessToken!)!
   Alamofire.request(baseURL + endpoint,headers: headers)
            .responseArray { (response: DataResponse<[Model]>) in
            print("Response: \(response)")

    }

Upvotes: 0

Syed Qamar Abbas
Syed Qamar Abbas

Reputation: 3677

Create a custom request object of type URLRequest set your URL, Headers and RequestType in your request object then simply ask Alamofire to start this request.

let requestHeaders: [String: String] = [
            "Authorization": "bearer " + (Session.user?.accessToken!)!
        ]
        if let url = URL(string: "https://www.example.com/someApiURL") {
            var request = URLRequest(url: url)
            request.httpMethod = "GET"
            request.headerParam = requestHeaders
            Alamofire.request(request).responseJSON{ (response) -> Void in

            switch response.result {
            case .success:
                guard let rawJson = response.result.value as? [String: Any] else {

                    let serverError = NSError(domain: "Server error", code: (response.response?.statusCode)!, userInfo: ["msg": "Received Malformed data from server"])
                    errorBlock(serverError)
                    return
                }

                let formattedJson = JSON(rawJson)
                if (formattedJson["Message"] != JSON.null) {

                    let serverError = NSError(domain: "Server error", code: (response.response?.statusCode)!, userInfo: ["msg": formattedJson["Message"]])
                    errorBlock(serverError)
                } else { // No error case

                    Session.storeCategories = StoreCategory.initializeStoreCategoriesWithStores(storeCategoryList: formattedJson)
                    successBlock(formattedJson)
                }
            case .failure(let error):
                errorBlock(error)
            }
    }
}

Upvotes: 0

Sharad Chauhan
Sharad Chauhan

Reputation: 4891

You response is type of [[String: Any]] not [String: Any].

Change this as:

guard let rawJson = response.result.value as? [[String: Any]] else {
    let serverError = NSError(domain: "Server error", code: (response.response?.statusCode)!, userInfo: ["msg": "Received Malformed data from server"])
    errorBlock(serverError)
    return
}

Upvotes: 1

Related Questions