Загрузка файла Swift 4 Alamofire с параметрами в контроллер ASP.NET MVC - PullRequest
0 голосов
/ 12 марта 2019

У меня 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?

...