У меня ASP.NET MVC Controller определен так:
[HttpPost]
public string uploadQAImage(FileUploadClass fileUploadClass, HttpPostedFile image)
{
}
И вот как выглядит класс FileUploadClass.
public class FileUploadClass
{
public string job { get; set; }
public string createdBy { get; set; }
public string itemId { get; set; }
}
Что я пытаюсь сделать с Alamofireв iOS это вызвать этот контроллер, я попытался использовать параметры:
func saveQAPhotos(_ cellHolder: PhotoClass, completion: @escaping (_ result: Dictionary<String, Any>) -> Void)
{
let parameters: Parameters = [
"job" : cellHolder.job!,
"itemId" : cellHolder.itemId!,
"createdBy" : appDelegate.username!
]
let urlComponents = NSURLComponents(string: webservice + "uploadQAImage");
urlComponents?.user = appDelegate.username;
urlComponents?.password = appDelegate.password;
let url = urlComponents?.url;
Alamofire.upload(multipartFormData: { (multipartFormData) in
for (key, value) in parameters {
multipartFormData.append("\(value)".data(using: String.Encoding.utf8)!, withName: key as String)
}
if let data = cellHolder.photo {
multipartFormData.append(data, withName: "image", fileName: "image.png", mimeType: "image/png")
}
}, usingThreshold: UInt64.init(), to: url!, method: .post, headers: nil) { (result) in
switch result{
case .success(let upload, _, _):
upload.responseJSON { response in
if let result = response.result.value {
let jsonData = result as! Dictionary<String, Any>
completion(jsonData)
}
}
case .failure(_):
print("error")
}
}
}
Но это не сработало на стороне ASP.NET, я получаю эту ошибку:
can 't привязать несколько параметров к содержимому запроса
Я также пытался отправить данные как [AnyHashable: Any]
, например, так:
func saveQAPhotos(_ cellHolder: PhotoClass, completion: @escaping (_ result: Dictionary<String, Any>) -> Void)
{
var jsonDict = [AnyHashable: Any]()
jsonDict["job"] = cellHolder.job
jsonDict["itemId"] = cellHolder.itemId
jsonDict["createdBy"] = appDelegate.username
let jsonData: Data? = try? JSONSerialization.data(withJSONObject: jsonDict, options: .prettyPrinted)
let urlComponents = NSURLComponents(string: webservice + "uploadQAImage");
urlComponents?.user = appDelegate.username;
urlComponents?.password = appDelegate.password;
let url = urlComponents?.url;
Alamofire.upload(multipartFormData: { (multipartFormData) in
multipartFormData.append(jsonData!, withName: "fileUploadClass", mimeType: "application/json")
if let data = cellHolder.photo {
multipartFormData.append(data, withName: "image", fileName: "image.png", mimeType: "image/png")
}
}, usingThreshold: UInt64.init(), to: url!, method: .post, headers: nil) { (result) in
switch result{
case .success(let upload, _, _):
upload.responseJSON { response in
if let result = response.result.value {
let jsonData = result as! Dictionary<String, Any>
completion(jsonData)
}
}
case .failure(_):
print("error")
}
}
}
Та же ошибка, что и раньше
не может привязать несколько параметров к содержимому запроса
Теперь, когда я изменяю контроллер ASP.NET, чтобы получить только FileUploadClass, вот так:
[HttpPost]
public string uploadQAImage(FileUploadClass fileUploadClass)
{
}
Я получаю этоошибка:
Ссылка на объект не установлена для экземпляра объекта.
Я могу только предположить, если я исправлю не могу связать несколько параметров с содержимым запросаошибка Я получу эту ошибку дальше.
Я почти уверен, что отправляю данные неправильно, поэтому я предполагаю, что мой вопрос заключается в том, как отправить данные из метода загрузки Alamofire в метод ASP.NET MVC?