2015-09-24 25 views
5

Tôi cố gắng để thêm tiêu đề tùy chỉnh với điều này:Swift Alamofire thêm tiêu đề tùy chỉnh cho tất cả các yêu cầu

let manager = Manager.sharedInstance 
manager.session.configuration.HTTPAdditionalHeaders = [ 
    "Authorization": "Token \(token)" 
] 

Nhưng nó không hoạt động, những gì tôi làm sai?

Tôi cần thêm thông tin này sau khi đăng nhập, để tiêu đề đó sẽ được sử dụng trong tất cả các yêu cầu.

Trả lời

4

tôi không biết nơi bạn làm điều đó nhưng yêu cầu AlomoFire của tôi trông giống như:

Alamofire.request(.GET, urlPath, parameters: parameters, headers: ["X-API-KEY": apiKey, "Content-type application":"json", "Accept application" : "json"]).responseJSON() { (req,res, data, error) in //blah blah } 

tôi đoán là bạn có thể đưa thông tin tiêu đề của bạn vào đó mảng tiêu đề

+2

nó đặt tiêu đề cho chỉ có một yêu cầu, nhưng Mirza Delic hỏi làm thế nào để thiết lập tiêu đề tùy chỉnh cho tất cả các yêu cầu –

+0

@ Thông tin tiêu đề Glenn vào mảng tiêu đề hoặc Từ điển đó –

1

Bạn không nên thêm Authorization tiêu đề theo cách này. Chúng phải luôn được nối thêm bằng tham số headers trong phương thức request như được hiển thị bởi @Glenn. Ngoài ra, nếu bạn cần nối thêm các tiêu đề khác vào cấu hình, bạn cần phải tạo cấu hình tùy chỉnh, đặt giá trị tiêu đề, sau đó tạo một phiên bản Manager mới với cấu hình mới. Thêm tiêu đề vào cấu hình sau khi nó đã được sử dụng để tạo một phiên URL dẫn đến hành vi không xác định tùy thuộc vào phiên bản hệ điều hành nào bạn đang chạy. Chúng tôi có nhiều bài kiểm tra ở Alamofire thể hiện hành vi khác nhau này.

2

Tôi đã mệt mỏi khi cố gắng thay thế toàn bộ ứng dụng theo cách thủ công bằng cách thêm tiêu đề vào 100+ yêu cầu của tôi. Tôi đã lựa chọn một cách tiếp cận lazier hơn:

Thực hiện một AlamofireManagerExtension.swift và sử dụng đoạn mã sau:

import Foundation 
import Alamofire 

extension Manager { 
    public func myRequest(
     method: Alamofire.Method, 
     _ URLString: URLStringConvertible, 
     parameters: [String: AnyObject]? = nil, 
     encoding: ParameterEncoding = .URL, 
     headers: [String: String]? = ["MY-STATIC-API-KEY" : "BLAHBLAHBLAH"]) 
     -> Request 
    { 
     return Manager.sharedInstance.request(
      method, 
      URLString, 
      parameters: parameters, 
      encoding: encoding, 
      headers: headers 
     ) 
    } 
} 

Sau đó, ctrl-shift-f trên dự án xcode của bạn, tìm kiếm sharedInstance.request hoặc bất cứ điều gì bạn thực hiện yêu cầu (tất cả mã của tôi theo mẫu này) và thay thế bằng sharedInstance.myRequest (Hãy chắc chắn không thay đổi sharedInstance.request của tiện ích mở rộng đó) và voila:

Tiêu đề tùy chỉnh thay đổi toàn cầu cho tất cả các yêu cầu!

Nếu bạn muốn thêm khóa tùy chỉnh, tất nhiên bạn có thể thêm phương thức thay thế bằng phương thức thay thế như sharedInstance.request (phương thức: ...) vào sharedInstance.myRequest (customKeys: ..., method: .. .) nếu bạn cần các biến tùy chỉnh.

Các vấn đề liên quan