إرسال طلب المتشعب إلى خادم صافي

أريد أن أرسل طلب آخر إلى خادم الشبكة. هناك رمز بلدي لطلب آخر:

  public func SendPostHttpRequest(baseURL: String, parameter: [String:Any], closure:@escaping ((_ success:JSON,_ error:NSError?) -> Void)) {
    let manager = Alamofire.SessionManager.default
    if let url = URL(string: baseURL) {
      var urlRequest = URLRequest(url: url)
      urlRequest.setValue("text/html; charset=utf-8", forHTTPHeaderField: "Content-Type")
      urlRequest.setURLEncodedFormData(parameters: parameter)
      manager.request(urlRequest).responseString { response in
        debugPrint(" HTML error -------> \(response)")
      }
      manager.request(urlRequest).responseJSON { response in
        switch response.result {
        case .success(let JSON) :
          closure(JSON,nil)
        case .failure(let error):
          closure(nil,error as NSError)
          debugPrint("get error ---> \((error.localizedDescription)) ")
        }
      }
    }
  }

هذا هو تحديد ملحق لمجموعة URLEncodedFormData لطلب

 extension URLRequest {
        private static let alloweCharacters = CharacterSet(charactersIn: "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789  -_.*@$!#/:+[]\n")
          public mutating func setURLEncodedFormData(parameters: [String: Any]) {
            var encodedParameters = ""
            for (key, value) in parameters {

              if !encodedParameters.isEmpty {
                encodedParameters += "&"
              }
              encodedParameters += URLRequest.urlEncoded(value: key) ?? ""
              encodedParameters += "="

              let valuee = value
              if let boolValue = valuee as? Bool {
                encodedParameters += "\(boolValue)"
              }
              if let intValue = valuee as? Int {
                encodedParameters += "\(intValue)"
              }
              if let stringValue = valuee as? String {
                encodedParameters += (URLRequest.urlEncoded(value: stringValue) ?? "")
              }
            }
            self.httpMethod = "POST"
            self.setValue("application/x-www-form-urlencoded", forHTTPHeaderField: "Content-Type")
            self.httpBody = encodedParameters.data(using: .utf8)
          }

          private static func urlEncoded(value: String?) -> String? {

            return value?.addingPercentEncoding(withAllowedCharacters: alloweCharacters)!.replacingOccurrences(of: " ", with: "")
          }
        }

لدي مشكلة في إرسال المتغيرات بأنواع مختلفة للخادم. في جانب الخادم أتلقى هذا الخطأ: مرجع كائن لم يتم تعيين إلى مثيل كائن.

أعتقد لأنني أرسل جميع المعلمات إلى السلسلة ، لا يكتشف الجانب الخادم من المتغيرات bool و integer.

هذا هو فئة كائن الطلب ، وسؤالي الآن هو أن نوع المعلمة في عدد صحيح مع طريقة setURLEncodedFormData إرسال نوع عدد صحيح إلى الخادم أو سلسلة؟

class RegisterRequest: NSObject {
  var Usertoken: String!
  var ProffessionId: Int?
  override init() {
    self.Usertoken = ""
    self.ProvinceId = nil
}
}
0
على سبيل المثال ، يجب على تنسيق Integer في جانب الخادم إرسال معلمة Integer.
وأضاف المؤلف ava, مصدر
TheTiger ونوع المحتوى الذي يدعمه هو Content-Type: application/x-www-form-urlencoded
وأضاف المؤلف ava, مصدر
TheTiger شكرا للرد في طريقة setURLEncodedFormData بالضبط أفعل ذلك. أنا تحديث سؤالي. يرجى النظر في ذلك
وأضاف المؤلف ava, مصدر
ما التنسيق الذي يقبل خادمك؟
وأضاف المؤلف TheTiger, مصدر
بالنسبة إلى application/x-www-form-urlencoded ، فإن نص الرسالة HTTP المرسلة إلى الخادم عبارة عن سلسلة استعلام عملاقة واحدة - يتم فصل أزواج الاسم/القيمة علامة العطف (&) ، ويتم فصل الأسماء من القيم بواسطة رمز يساوي (=). مثال على ذلك: MyVariableOne = ValueOne & MyVariableTwo = ValueTwo
وأضاف المؤلف TheTiger, مصدر