Csharp/C#教程:从来自NSUrlRequest的httpcontext获取变量分享


从来自NSUrlRequest的httpcontext获取变量

对于Iphone和asp.net服务器之间的http连接“POST”,这个问题将是一个很好的教程:)我想要做的是将图像从iphone发送到Asp.net服务器; 这是我在objective-c中的uploadImagefunction:

- (IBAction)uploadImage { /* turning the image into a NSData object getting the image back out of the UIImageView setting the quality to 90 */ NSData *imageData = UIImageJPEGRepresentation(image.image, 33); // setting up the URL to post to NSString *urlString = @"MyWebServiceUrl"; // setting up the request object now NSMutableURLRequest *request = [[[NSMutableURLRequest alloc] init] autorelease]; [request setURL:[NSURL URLWithString:urlString]]; [request setHTTPMethod:@"POST"]; /* add some header info now we always need a boundary when we post a file also we need to set the content type You might want to generate a random boundary.. this is just the same as my output from wireshark on a valid html post */ NSString *boundary = [NSString stringWithString:@"---------------------------14737809831466499882746641449"]; NSString *contentType = [NSString stringWithFormat:@"multipart/form-data; boundary=%@",boundary]; [request addValue:contentType forHTTPHeaderField: @"Content-Type"]; /* now lets create the body of the post */ NSMutableData *body = [NSMutableData data]; [body appendData:[[NSString stringWithFormat:@"rn--%@rn",boundary] dataUsingEncoding:NSUTF8StringEncoding]]; [body appendData:[[NSString stringWithString:@"Content-Disposition: form-data; filepath="ProfilePic"; filename="ipodfile"rn"] dataUsingEncoding:NSUTF8StringEncoding]]; [body appendData:[[NSString stringWithString:@"Content-Type: application/octet-streamrnrn"] dataUsingEncoding:NSUTF8StringEncoding]]; [body appendData:[NSData dataWithData:imageData]]; [body appendData:[[NSString stringWithFormat:@"rn--%@--rn",boundary] dataUsingEncoding:NSUTF8StringEncoding]]; // setting the body of the post to the reqeust [request setHTTPBody:body]; // now lets make the connection to the web NSData *returnData = [NSURLConnection sendSynchronousRequest:request returningResponse:nil error:nil]; NSString *returnString = [[NSString alloc] initWithData:returnData encoding:NSUTF8StringEncoding]; NSLog(@"%@", returnString); 

}

这是我的webService Fonctions,它解析发送的数据并保存文件:

 public class SaveData : IHttpHandler { public void ProcessRequest(HttpContext context) { context.Response.ContentType = "text/plain"; bool hasErrors = false; HttpFileCollection filesPosted = context.Request.Files; String filePath = context.Request.QueryString["filepath"]; String fileName = context.Request.QueryString["filename"]; try { if (String.IsNullOrEmpty(fileName) || String.IsNullOrEmpty(filePath) || filesPosted.Count <= 0) hasErrors = true; if (!hasErrors) { HttpContext.Current.Response.Write(WriteFile(filesPosted[0], filePath, fileName)); } else { context.Response.Write("Failed: parsing error"); } } catch (Exception ex) { context.Response.Write("Failed: exception error:::" + ex.Message); } } private string WriteFile(HttpPostedFile file, String filePath, String fileName) { System.IO.Directory.CreateDirectory(filePath); int counter = 0; string path = String.Format("{0}\{1}.jpg", filePath, fileName); while (System.IO.File.Exists(path)) { counter++; path = String.Format("{0}\{1}-{2}.jpg", filePath, fileName, counter); } file.SaveAs(path); return path; } public bool IsReusable { get { return false; } } } 

我的问题来自这两行

  String filePath = context.Request.QueryString["filepath"]; String fileName = context.Request.QueryString["filename"]; 

context.Request.QueryString返回null,因此我的hasErrors为false; 任何想法如何解决,将非常感谢,感谢所有人。

查询字符串将从Url参数填充(https://someserver.com/foobar?field1=value1&field2=value2)

要访问POST正文中发送的表单数据,请使用Request.Form["filepath"]或简写Request["filepath"] ,它在Form,QueryString,Cookies和ServerVariables集合中查找项目。

已发布文件的数据可在Request.Files找到

经过一天的尝试,这里的解决方案:

客户代码:

 // post body NSMutableData *body = [NSMutableData data]; // add params (all params are strings) [body appendData:[[NSString stringWithFormat:@"--%@rn", boundary] dataUsingEncoding:NSUTF8StringEncoding]]; [body appendData:[[NSString stringWithFormat:@"Content-Disposition: form-data; name="%@"rnrn", @"filename"] dataUsingEncoding:NSUTF8StringEncoding]]; [body appendData:[[NSString stringWithFormat:@"%@rn", imageName] dataUsingEncoding:NSUTF8StringEncoding]]; // add image data if (imageData) { [body appendData:[[NSString stringWithFormat:@"--%@rn", boundary] dataUsingEncoding:NSUTF8StringEncoding]]; [body appendData:[[NSString stringWithFormat:@"Content-Disposition: form-data; name="myImage"; filename="image.jpg"rn"] dataUsingEncoding:NSUTF8StringEncoding]]; [body appendData:[[NSString stringWithString:@"Content-Type: image/jpegrnrn"] dataUsingEncoding:NSUTF8StringEncoding]]; [body appendData:imageData]; [body appendData:[[NSString stringWithFormat:@"rn"] dataUsingEncoding:NSUTF8StringEncoding]]; } 

Asp.net服务器代码:

 String filePath = context.Request.Form["filename"]; 

希望你喜欢这个问题(教程);)

上述就是C#学习教程:从来自NSUrlRequest的httpcontext获取变量分享的全部内容,如果对大家有所用处且需要了解更多关于C#学习教程,希望大家多多关注—计算机技术网(www.ctvol.com)!

本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。

ctvol管理联系方式QQ:251552304

本文章地址:https://www.ctvol.com/cdevelopment/1026794.html

(0)
上一篇 2022年1月9日
下一篇 2022年1月9日

精彩推荐