Данные в HTTPBody с методом PUT не работают, а с POST работают?IOS

Программируем под IOS
Ответить
Anonymous
 Данные в HTTPBody с методом PUT не работают, а с POST работают?

Сообщение Anonymous »

Прежде всего, я хотел бы сказать, что у меня возникла та же проблема, что и на следующий вопрос: Как добавить данные в HTTPBody с помощью метода PUT в NSURLSession? Но на него не было ответа, поэтому я задал свой собственный вопрос. p>
Мы написали API узла для школьного задания. Мы протестировали весь API. (Вероятность того, что что-то не так, невелика.)
После этого я начал работать над клиентом iOS для пользователей CRUD.
Создание пользователя проходит идеально, но всякий раз, когда я попробуйте отредактировать пользователя, происходит что-то странное. Данные на сервер поступают как неопределенные.
Для сохранения пользователя я использую следующий код:

Код: Выделить всё

func saveUser(user: User, completionHandler: (String?, User?) -> Void) {
let url = NSURL(string: "https://pokeapi9001.herokuapp.com/api/users/")
let request = NSMutableURLRequest(URL:url!)
request.HTTPMethod = "POST"

let postString = "email=\(user.email)&password=\(user.password!)&role=\(user.role)"
request.HTTPBody = postString.dataUsingEncoding(NSUTF8StringEncoding)

request.cachePolicy = NSURLRequestCachePolicy.ReloadIgnoringCacheData

let task = NSURLSession.sharedSession().dataTaskWithRequest(request) {
data, response, error in
if error != nil {
print("error: \(error)")
}

do {
guard let data = data else {
throw JSONError.NoData
}
guard let json = try NSJSONSerialization.JSONObjectWithData(data, options: []) as? NSDictionary else {
throw JSONError.ConversionFailed
}

//do specific things

} catch let error as JSONError {
completionHandler(error.rawValue, nil)
} catch let error as NSError {
completionHandler(error.debugDescription, nil)
}

}
task.resume()
}
Имейте в виду, это работает отлично (не знаю, предназначено ли оно для такого использования).
Чтобы редактировать пользователя Я использую следующий код:

Код: Выделить всё

func editUser(user: User, completionHandler: (String?, User?) -> Void) {
let url = NSURL(string: "https://pokeapi9001.herokuapp.com/api/users/\(user.id!)")
let request = NSMutableURLRequest(URL:url!)
request.HTTPMethod = "PUT"

let postString = "email=\(user.email)&password=\(user.password!)&role=\(user.role)"
request.HTTPBody = postString.dataUsingEncoding(NSUTF8StringEncoding)

request.cachePolicy = NSURLRequestCachePolicy.ReloadIgnoringCacheData

let task = NSURLSession.sharedSession().dataTaskWithRequest(request) {
data, response, error in
if error != nil {
print("error: \(error)")
}

do {
guard let data = data else {
throw JSONError.NoData
}
guard let json = try NSJSONSerialization.JSONObjectWithData(data, options: []) as? NSDictionary else {
throw JSONError.ConversionFailed
}

//do specific things

} catch let error as JSONError {
completionHandler(error.rawValue, nil)
} catch let error as NSError {
completionHandler(error.debugDescription, nil)
}
}
task.resume()
}
(Исходный код немного длиннее, но я удалил части, не имеющие ничего общего с фактической публикацией данных).
У меня есть действительно понятия не имею, что я делаю не так, может быть что-то маленькое и глупое. Пожалуйста, помогите.
Редактировать после ввода от @fiks
Чтобы внести ясность, проблема в том, что я заполняю postString в методе editUser точно так же, как и в методе saveUser. (По крайней мере, я так думаю).
Однако в методе saveUser postString, похоже, правильно передается в API (он создает нового пользователя с заданными значениями).
Метод editUser не передает значения.
Если я помещаю журнал консоли на сервер, он показывает, что все значения «не определены».Чтобы проверить правильность postString на Часть iOS. Я распечатал обе строки. Оба они вывели:

email=user@test.com&password=test&role=admin


Подробнее здесь: https://stackoverflow.com/questions/404 ... ith-a-post
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «IOS»