【发布时间】:2018-11-27 01:48:45
【问题描述】:
我有一个使用以下方法的 Windows WEB API:
public async Task<IHttpActionResult> SaveContract([FromBody] ModelDTO model)
{
string custName = model.CustomerName;
...
}
我想要的模型如下所示:
public class ModelDTO
{
public int CustomerNumber { set; get; }
public string CustomerName { set; get; }
public string CustomerMail { set; get; }
public string imageDataBase64 { set; get; }
}
我想用我的 iOS 应用 (Swift 4) 和 Alamofire 4.7.2 调用 API 我的开发服务器有一个自签名证书。所以我需要禁用评估。
let defaultManager: Alamofire.SessionManager = {
let serverTrustPolicies: [String: ServerTrustPolicy] = [
"devserver": .disableEvaluation
]
let configuration = URLSessionConfiguration.default
configuration.httpAdditionalHeaders = Alamofire.SessionManager.defaultHTTPHeaders
return Alamofire.SessionManager(
configuration: configuration,
serverTrustPolicyManager: ServerTrustPolicyManager(policies: serverTrustPolicies))
}()
let webApi: String = "https://devserver:7208/api/KP/SaveContract"
let data = UIImageJPEGRepresentation(photoImageView.image!,1) //got the Data form an image view
var imgString: String = ""
imgString = data.base64EncodedString()
let Param = Parameters = [
"CustomerNumber": 1,
"CustomerName": "Test Name",
"CustomerMail": "test@test.com",
"imageDataBase64": imgString]
defaultManager.upload(
multipartFormData: { multipartFormData in
for (key, value) in contAsJsonParam {
multipartFormData.append("\(value)".data(using: .utf8)!, withName:key)
}
},
to: webApi,
encodingCompletion: { encodingResult in
switch encodingResult {
case .success(let upload, _, _):
upload.responseJSON { response in
debugPrint(response)
//lbl sichtbar machen
}
case .failure(let encodingError):
print(encodingError)
}
})
使用 Alamofire.request 调用没有图像的 api 有效,但使用图像请求,它不起作用。 (错误的 ssl 错误) 所以我尝试了上传方法,但上传不以任何方式工作(有或没有图像字符串)
如果我用 Alamofire.upload 调用 Api,我得到一个 system.net.http.unsupportedmediatypeexception
"没有 MediaTypeFormatter 可用于读取类型的对象 来自媒体类型为“multipart/form-data”的内容的“ModelDTO”。”
我尝试通过“headers: Content-Type:application/json”将上传类设为json 但没有效果。
我尝试通过放置来修复它
config.Formatters.JsonFormatter.SupportedMediaTypes.Add(new MediaTypeHeaderValue("multipart/form-data"));
在 WebApiConfig 中。然后我得到了另一个错误 我在“string custName = model.CustomerName;”行的 api 中得到了 NullReferenceException
【问题讨论】: