请注意:不重复
在你决定我的问题是重复之前,请阅读所有这些,因为我已经搜索了答案并阅读了许多关于SO的文章,但没有一个解决了[FromForm]
WebAPI绑定的问题。
我在Controller中有以下WebAPI方法:
[HttpPost("SetScreenName")]
public ActionResult SetScreenName([FromForm] String guid, [FromForm] String screenName)
字符串
用户可以简单地传入一个guid和一个screenName来设置用户配置文件的screenName。
我可以使用以下代码从JavaScript fetch
轻松调用它:
const formDataX = new FormData();
formDataX.append("guid","fakeguid-here");
formDataX.append("screenName", "newoneForTest");
fetch("https://localhost:7103/User/SetScreenName", {
method: 'POST',
body: formDataX,
})
.then(response => response.json())
.then(data => console.log(data));
型
现在,我需要知道如何使用Swift调用这个相同的WebAPI方法(在iOS App / SwiftUI中)
Here's What I've Tried
我已经试着通过这个几天,总是会得到错误从我的WebAPI指出,一个或两个参数(guid,screenName)丢失。
下面是一个SO答案列表和我试图从中得出答案的代码片段:
- swift url Session post request with parameters and image (Multipart Form-Data Requests )
- HTTP Request in Swift with POST method的
得到了以下代码,我部分使用了它,但仍然失败:注意:失败总是一个或两个参数都丢失。
let url = URL(string: "https://httpbin.org/post")!
var request = URLRequest(url: url)
request.setValue("application/x-www-form-urlencoded", forHTTPHeaderField: "Content-Type")
request.setValue("application/json", forHTTPHeaderField: "Accept")
request.httpMethod = "POST"
型
- How can I build a URL with query parameters containing multiple values for the same key in Swift?的
尝试以下代码,但WebAPI只能识别第一个参数(guid
):
url.append(queryItems: [URLQueryItem(name: "guid", value: "\(guid)"), URLQueryItem(name: "screenName", value: "\(screenName)")])
型
1.如何在Swift中使用JSON body进行HTTP Post请求?
尝试使用该答案中的代码将参数编码为JSON:
var outData = userData(uuid.uuidString.lowercased(), screenName)
var je = JSONEncoder()
guard let jsonData = try? je.encode(outData) else{
print ("encode FAILURE!")
return false
}
型
结果数据如下:{"guid"="5c290f79-73a2-4bba-b34e-4d68c9d73ff7","screenName"="sallafootam"}
这些解决方案都不起作用,我的WebAPI总是指示一个或多个参数(guid
或screenName
)丢失。
使用Swift发布到我的WebAPI方法的最终设置是什么?
1条答案
按热度按时间xwbd5t1u1#
下面是我最终发现的最简单的设置,它适用于我的WebAPI和那些
[FromForm]
参数:字符串
请注意,这些值看起来像普通的QueryString,但您不能将它们添加到queryString中,因为它们不会绑定到WebAPI端。
它们必须被创建,就像我在上面的代码片段中展示的那样,然后添加到
request
的httpBody
中。