简体   繁体   English

URLRequest和URLSession的拦截器,用于为所有URLRequest添加自定义标头字段?

[英]Interceptors for URLRequest and URLSession for adding custom header fields for all URLRequest?

How can i add custom Interceptor in URLRequest and URLSession for all URLRequest in app. 如何在应用程序中的所有URLRequest的URLRequest和URLSession中添加自定义拦截器。 So i can add my own custom HTTPHeader Fields at one place for all http request, there is alamofire Interceptor but i don't want to use alamofire, i want Interceptor in urlsession and urlrequest in swift 4. I extend the urlrequest but not work for me. 所以我可以在一个地方为所有http请求添加我自己的自定义HTTPHeader字段,有alamofire Interceptor但我不想使用alamofire,我想在urlsession中拦截拦截器和在swift 4中使用urlrequest。我扩展了urlrequest但是没有工作我。

//1st One    
extension URLRequest {
            init(_ url: URL) {
                self.init(url: url)
                self.setValue(deviceInformation.shared.deviceModel, forHTTPHeaderField: "deviceModel")
                self.allHTTPHeaderFields?.updateValue(deviceInformation.shared.deviceModel, forKey: "deviceModel1")
            }
        }

// 2nd one

extension URLRequest {
   var instance: URLRequest {
     var instanceRequest: URLRequest!
      instanceRequest.allHTTPHeaderFields?.updateValue(deviceInformation.shared.deviceModel, forKey: "deviceModel")
      instanceRequest.addValue(deviceInformation.shared.deviceSystemName, forHTTPHeaderField: "deviceSystemName")
      instanceRequest.addValue(deviceInformation.shared.deviceSystemVersion, forHTTPHeaderField: "deviceSystemVersion")
      instanceRequest.addValue(deviceInformation.shared.getAppVersion(), forHTTPHeaderField: "appVersion")
       return instanceRequest
    }
}
//both are not working
 //Here is the answer for "Custom Header Fields" for all URLRequest.   

extension URLRequest {
        init(_ url: URL) {
            self.init(url: url)
            self.setValue("Value", forHTTPHeaderField: "fieldNamme")
        }
    }

//how to use
func aBC(){
    //how to call it.
    let myUrl = URL(string: "Your url string")
    let request =  URLRequest(myUrl) //this will work and add custom header
    //let request =  URLRequest(url: myUrl) // this will not work because it call the super init method of urlrequest.

    request.httpMethod = "POST"
    do {
        request.httpBody = try JSONSerialization.data(withJSONObject: ["bodyParam" : "value"], options: [])
    } catch let error {
        return
    }

    let dataTask = URLSession.shared.dataTask(with: request) {
        data,response,error in

        do {
            //.
           // .
           // .
        } catch let error as NSError {
        }
    }
    dataTask.resume()
}

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM