Как правильно отправлять данные в Swift (приложение для iOS) в мой .net WebAPI, который имеет параметры [FromForm] и исп ⇐ IOS
-
Гость
Как правильно отправлять данные в Swift (приложение для iOS) в мой .net WebAPI, который имеет параметры [FromForm] и исп
Обратите внимание: это не дубликат
Пожалуйста, прочитайте все это, прежде чем вы решите, что мой вопрос является дубликатом, потому что я искал ответы и читал множество вопросов на SO, но ни один из них не решает проблему наличия [FromForm] Привязка WebAPI.
У меня есть следующий метод WebAPI в контроллере:
[HttpPost("SetScreenName")] public ActionResult SetScreenName ([FromForm] String guid, [FromForm] String screenName) Пользователь может просто передать GUID и имя экрана, чтобы установить имя экрана для профиля пользователя.
Я могу легко вызвать это из JavaScript fetch, используя следующий код:
const formDataX = новый FormData(); formDataX.append("guid","fakeguid-here"); formDataX.append("screenName", "newoneForTest"); fetch("https://localhost:7103/User/SetScreenName", { метод: 'POST', тело: формаДанныеX, }) .then(ответ => ответ.json()) .then(данные => console.log(данные)); Теперь мне нужно знать, как вызвать тот же метод WebAPI с помощью Swift (в приложении iOS/SwiftUI)
Вот что я пробовал
Я пытался справиться с этим уже пару дней, и мой веб-API всегда получал сообщения об ошибках, в которых говорилось, что один или оба параметра (guid, screenName) отсутствуют.
Вот список SO-ответов и фрагментов кода, из которого я пытался получить ответ:
[*]
Запрос на публикацию сеанса Swift url с параметрами и изображением (многочастные запросы данных формы)
[*]
HTTP-запрос в Swift с методом POST
Получил следующий код, который я частично использовал, но все равно не получилось: Примечание: ошибка всегда заключалась в том, что один или оба параметра отсутствовали.
let url = URL(строка: «https://httpbin.org/post»)! запрос вар = URLRequest (url: URL) request.setValue("application/x-www-form-urlencoded", forHTTPHeaderField: "Content-Type") request.setValue("application/json", forHTTPHeaderField: "Принять") request.httpMethod = "POST" [*]Как создать URL-адрес с параметрами запроса, содержащими несколько значений для одного и того же ключа в Swift? Попробовал следующий код, но WebAPI распознал только первый параметр (guid):
url.append(queryItems: [URLQueryItem(name: "guid", value: "\(guid)"), URLQueryItem(name: "screenName", value: "\(screenName)")]) [*]Как сделать запрос HTTP Post с телом JSON в Swift? Пытался закодировать параметры в формате JSON, используя код из этого ответа:
var outData = userData(uuid.uuidString.lowercased(), screenName) вар je = JSONEncoder() охранник пусть jsonData = попробовать? je.encode(outData) еще { print («закодировать ОШИБКА!») вернуть ложь } Данные результата выглядели так: {"guid"="5c290f79-73a2-4bba-b34e-4d68c9d73ff7","screenName"="sallafootam"
Ни одно из этих решений не сработало, и мой WebAPI всегда указывал, что один или несколько параметров (guid или screenName) отсутствуют.
Какова окончательная настройка для публикации в моем методе WebAPI с использованием Swift?
Обратите внимание: это не дубликат
Пожалуйста, прочитайте все это, прежде чем вы решите, что мой вопрос является дубликатом, потому что я искал ответы и читал множество вопросов на SO, но ни один из них не решает проблему наличия [FromForm] Привязка WebAPI.
У меня есть следующий метод WebAPI в контроллере:
[HttpPost("SetScreenName")] public ActionResult SetScreenName ([FromForm] String guid, [FromForm] String screenName) Пользователь может просто передать GUID и имя экрана, чтобы установить имя экрана для профиля пользователя.
Я могу легко вызвать это из JavaScript fetch, используя следующий код:
const formDataX = новый FormData(); formDataX.append("guid","fakeguid-here"); formDataX.append("screenName", "newoneForTest"); fetch("https://localhost:7103/User/SetScreenName", { метод: 'POST', тело: формаДанныеX, }) .then(ответ => ответ.json()) .then(данные => console.log(данные)); Теперь мне нужно знать, как вызвать тот же метод WebAPI с помощью Swift (в приложении iOS/SwiftUI)
Вот что я пробовал
Я пытался справиться с этим уже пару дней, и мой веб-API всегда получал сообщения об ошибках, в которых говорилось, что один или оба параметра (guid, screenName) отсутствуют.
Вот список SO-ответов и фрагментов кода, из которого я пытался получить ответ:
[*]
Запрос на публикацию сеанса Swift url с параметрами и изображением (многочастные запросы данных формы)
[*]
HTTP-запрос в Swift с методом POST
Получил следующий код, который я частично использовал, но все равно не получилось: Примечание: ошибка всегда заключалась в том, что один или оба параметра отсутствовали.
let url = URL(строка: «https://httpbin.org/post»)! запрос вар = URLRequest (url: URL) request.setValue("application/x-www-form-urlencoded", forHTTPHeaderField: "Content-Type") request.setValue("application/json", forHTTPHeaderField: "Принять") request.httpMethod = "POST" [*]Как создать URL-адрес с параметрами запроса, содержащими несколько значений для одного и того же ключа в Swift? Попробовал следующий код, но WebAPI распознал только первый параметр (guid):
url.append(queryItems: [URLQueryItem(name: "guid", value: "\(guid)"), URLQueryItem(name: "screenName", value: "\(screenName)")]) [*]Как сделать запрос HTTP Post с телом JSON в Swift? Пытался закодировать параметры в формате JSON, используя код из этого ответа:
var outData = userData(uuid.uuidString.lowercased(), screenName) вар je = JSONEncoder() охранник пусть jsonData = попробовать? je.encode(outData) еще { print («закодировать ОШИБКА!») вернуть ложь } Данные результата выглядели так: {"guid"="5c290f79-73a2-4bba-b34e-4d68c9d73ff7","screenName"="sallafootam"
Ни одно из этих решений не сработало, и мой WebAPI всегда указывал, что один или несколько параметров (guid или screenName) отсутствуют.
Какова окончательная настройка для публикации в моем методе WebAPI с использованием Swift?
Мобильная версия