0

我的服务器上有一个 ASP.NET MVC。Iphone 正在向 ASP.NET MVC 控制器发送一个 Http 请求。这是Iphone代码,

-(void)addNSData:(NSData*)datapart inData:(NSMutableData*)POSTBody forkey:(NSString*)key
{
    [POSTBody appendData:[[NSString stringWithFormat:@"Content-Disposition: form-data; name=\"%@\"\r\n\r\n", key] dataUsingEncoding:NSUTF8StringEncoding]];
    [POSTBody appendData:[[NSString stringWithFormat:@"%@", datapart] dataUsingEncoding:NSUTF8StringEncoding]];
    [POSTBody appendData:[[NSString stringWithFormat:@"\r\n--%@\r\n", POSTBoundary] dataUsingEncoding:NSUTF8StringEncoding]];
}

{
    NSMutableURLRequest *request = nil;
    request = [NSMutableURLRequest requestWithURL:[NSURL URLWithString:@"http://XXX/XXX/publish"]];

NSString *jsonFilePath = [[SharedData shareData].pageDataFolderPath stringByAppendingPathComponent:@"page_json.json"];

[ request setHTTPMethod: @"POST" ];
 [request addValue:[NSString stringWithFormat:@"multipart/form-data; boundary=%@", POSTBoundary] forHTTPHeaderField:@"Content-Type"];
    [request addValue:@".ASPXAUTH=XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX" forHTTPHeaderField:@"Cookie"];

// Add HTTP Body
 NSMutableData *POSTBody = [NSMutableData data];
    [POSTBody appendData:[[NSString stringWithFormat:@"--%@\r\n",POSTBoundary] dataUsingEncoding:NSUTF8StringEncoding]];
    [self addNSData:[NSData dataWithContentsOfFile:localZipPath] inData:POSTBody forkey:@"zipFile"];
    [self addNSData:[NSData dataWithContentsOfFile:jsonFilePath] inData:POSTBody forkey:@"contents"];
    NSString *v = page.mo_page.version;
    [self addNSData:[v dataUsingEncoding:NSUTF8StringEncoding] inData:POSTBody forkey:@"version"];
    [self addNSData:[@"true" dataUsingEncoding:NSUTF8StringEncoding] inData:POSTBody forkey:@"isActive"];
    [self addNSData:[page.mo_page.pageid dataUsingEncoding:NSUTF8StringEncoding] inData:POSTBody forkey:@"directory"];

    // Add the closing -- to the POST Form
    [POSTBody appendData:[[NSString stringWithFormat:@"\r\n--%@--\r\n", POSTBoundary] dataUsingEncoding:NSUTF8StringEncoding]];

    // Add the body to the myMedRequest & return
    [request setHTTPBody:POSTBody];

    NSURLResponse *response = nil;
    NSError *error = nil;
    NSData *responseData = [NSURLConnection sendSynchronousRequest:request returningResponse:&response error:&error];

    if(error)
    {
        NSLog(@"Error if any:%@",error.localizedDescription);

    }
    else {
        NSLog(@"Response : %@",[[NSString alloc] initWithData:responseData encoding:NSUTF8StringEncoding]);
    }
    [[NSFileManager defaultManager] removeItemAtPath:localZipPath error:nil];
    localZipPath = nil;
}

以这种格式获取数据的 ASP.NET MVC 服务器,例如

Request.Form["Directory"]= "<32383862 33363339 36393538 34653463 62643862 35376561 66653135 35313764>"
4

2 回答 2

2

内容类型“ multipart/form-data”应用于提交包含文件、非 ASCII 数据和二进制数据的表单。

[request addValue:[NSString stringWithFormat:@"multipart/form-data; boundary=%@", POSTBoundary] forHTTPHeaderField:@"Content-Type"];

那不应该是“ application/json”吗?
你告诉你的请求包含二进制数据,这就是服务器所期望的,这就是它得到的。

于 2013-02-12T14:42:48.450 回答
1

当您看到 ""<32383862..." 时,如果您将其作为 NSData 的“描述”,这就是您将看到的 (NSData *foo; ...; NSLog(@"FOO: %@", foo);) . 你需要做的是通过获取对象的长度和“bytes”指针来访问实际的字节。

NSData *foo;
// set foo to some data object
NSUInteger len = [data length];
uint8_t *ptr = [data bytes];
memcpy(toSomeLocation, ptr, len);
于 2013-02-12T14:41:12.287 回答