Как реализовать серверную часть C # при использовании ASIFormDataRequest? - PullRequest
2 голосов
/ 01 мая 2011

Я пытаюсь использовать ASIFormDataRequest для отправки данных на серверную часть ASP.net.Я создал страницу aspx. В настоящее время я могу получить два простых текста.Однако я не знаю, как вставить NSdata в C # с помощью Request.Form.

Вот код Obj-C:

ASIFormDataRequest *request = [ASIFormDataRequest requestWithURL:url];
[request setPostValue:@"Ben" forKey:@"name"];
[request setPostValue:@"Copsey" forKey:@"code"];
[request setFile:@"/Users/ben/Desktop/ben.jpg" forKey:@"photo"];
[request setData:imageData withFileName:@"myphoto.jpg" andContentType:@"image/jpeg" forKey:@"photo"];

Это текущий код C #:

 string name = Request.Form["name"] == null ? "" : Request.Form["name"];
 string code = Request.Form["code"]==null?"":Request.Form["code"];

Как вы видите, в iphone я пытаюсь отправить изображение на серверную часть C #, но я не знаю, как это сделать?

Ответы [ 2 ]

1 голос
/ 01 мая 2011

Чтобы отправить изображение в службу WCF REST, используя ASIFormDataRequest .. Вот пример из проекта, который у нас находится в производстве ...

предполагает, что у меня есть UIImage в переменной с именем 'image'

NSString *surl = @"http:www.SomeRestService.com"    
NSURL *url = [NSURL URLWithString:surl];

ASIFormDataRequest *r = [ASIFormDataRequest requestWithURL:url];
[r setValidatesSecureCertificate:NO];
[r setTimeOutSeconds:30];
[r setRequestMethod:@"POST"]; //default is POST (insert), 
[r setDelegate:self];
[r setDidFailSelector:@selector(requestDidFail:)];
//[r addRequestHeader:@"Content-Type" value:@"application/json"]   this will cause the call to fail.  No content-type header for this call.


NSMutableData *imageData = [NSMutableData dataWithData:UIImageJPEGRepresentation(image, .35)]; //we are really compressing our images.. you can do what you want, of course.
[r setPostBody:imageData];
[r setDidFinishSelector:@selector(imageSaveDidFinish:)];
[r startAsynchronous];

ОК, на стороне WCF вам нужно определить метод, который получает System.IO.Stream, и что Stream должен быть последним определенным параметром, это должен быть POST, и он долженне содержит никаких других параметров как часть тела POST (вы можете определить параметры в URL и строке запроса, хотя некоторые пуристы скажут, что это плохая форма для REST POST).

[WebInvoke(UriTemplate = "Upload", ResponseFormat = WebMessageFormat.Json, BodyStyle = WebMessageBodyStyle.Bare, Method = "POST")]
        public GenericObject SaveReceiptImage(System.IO.Stream imageStream)
        {
                            try
            {
                byte[] buffer = new byte[16 * 1024];

                using (MemoryStream ms = new MemoryStream())
                {
                    int read = 0;
                    while ((read = imageStream.Read(buffer, 0, buffer.Length)) > 0)
                    {
                        ms.Write(buffer, 0, read);
                    }

                    ms.Position = 0;

                    if (ms.Length > 0)
                    {
                      //save your byte array to where you want
                    }
                    else
                    {
                      // woops, no image was passed in
                    }
                }
            }
            catch (Exception ex)
            {
                //bad error occured, log it
            }

            return whatever;
        }
0 голосов
/ 01 мая 2011
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...