NSMutableURLRequest http状态代码413

时间:2012-06-20 16:10:15

标签: wcf rest post nsmutableurlrequest http-protocols

我有一个网络服务。我用它来接受一个小(缩略图大小)图像的base 64字符串表示。与Fiddler一起使用并手动发布请求时,此Web服务非常有用。当我使用NSMutableURLRequest(或ASIHTTPRequest)运行相同的请求时,它总是返回413状态代码(413是请求实体太大)。

为什么NSMutableURLRequest会让它拿出413,而Fiddler每次都会返回200?

这是我的NSMutableURLRequest代码。如果有人有任何想法,我真的可以使用推动。

        //the image request
        NSMutableURLRequest *imageRequest=[NSMutableURLRequest requestWithURL:[NSURL URLWithString:POST_IMAGE_API_URL] 
                                                                  cachePolicy:NSURLRequestUseProtocolCachePolicy
                                                              timeoutInterval:240.0];

        //the post parameters
        [imageRequest setHTTPMethod:@"POST"];
        [imageRequest setHTTPBody:[imageMessage dataUsingEncoding:NSUTF8StringEncoding]];
        [imageRequest setValue:@"text/xml" forHTTPHeaderField:@"Content-Type"];


        //a few other things
        NSURLResponse* imageresponse;
        NSError *imageerror;


        NSData* imageresult = [NSURLConnection sendSynchronousRequest:imageRequest returningResponse:&imageresponse error:&imageerror];
        NSHTTPURLResponse *httpResponse = (NSHTTPURLResponse*)imageresponse;

        NSLog(@"imageresponse: %d", httpResponse.statusCode);

2 个答案:

答案 0 :(得分:1)

当我看到你的代码时:

//the image request
NSMutableURLRequest *imageRequest = 
    [NSMutableURLRequest requestWithURL:[NSURL URLWithString:POST_IMAGE_API_URL]  
                            cachePolicy:NSURLRequestUseProtocolCachePolicy   
                        timeoutInterval:240.0];

我猜你在“POST_IMAGE_API_URL”#define中有一些笨拙的角色,很可能是你传递的参数。

您需要URL encode the URL string传递给您的网址请求。

尝试做:

// assuming POST_IMAGE_API_URL starts with a "@" character
NSString * yourURLAsString = [NSString stringWithString: POST_IMAGE_API_URL]; 
NSURL * yourEncodedURL = [yourURL stringByAddingPercentEscapesUsingEncoding: NSUTF8StringEncoding];

并将“yourEncodedURL”作为参数传递给URLRequest。

答案 1 :(得分:0)

我找到了解决方案。这个问题不在Apple端,而是在IIS端。 IIS托管应用程序(其中一个是我的WCF服务)的附加参数超出了WCF的web.config文件中指定的参数,该文件为每个服务指定了“uploadReadAheadSize”。我增加了这个,413消失了。有趣的是,当Fiddler在与服务所在的服务器所在的同一网络上的桌面客户端上发送HTTP请求时,我没有收到此错误。基本上,我有this guy's problem的解决方案,但不是他的背景。我的解决方案是他的背景。