Objective c NSURLConnection将JSON数据发布到ASP.Net WebAPI而不返回响应
我目前正在使用异步NSURLConnection向ASP.NETWebAPI资源发布json数据。正在调用连接:didSendBodyData:TotalBytesWrite:totalBytesExpectedToWrite:,并且正在写入正确数量的数据。但是没有调用连接:didReceiveResponse:、连接:didReceiveData:或ConnectiondDifinishLoading:,但最终它放弃了,连接丢失 我正在按如下方式设置连接:Objective c NSURLConnection将JSON数据发布到ASP.Net WebAPI而不返回响应,objective-c,ios,asp.net-web-api,Objective C,Ios,Asp.net Web Api,我目前正在使用异步NSURLConnection向ASP.NETWebAPI资源发布json数据。正在调用连接:didSendBodyData:TotalBytesWrite:totalBytesExpectedToWrite:,并且正在写入正确数量的数据。但是没有调用连接:didReceiveResponse:、连接:didReceiveData:或ConnectiondDifinishLoading:,但最终它放弃了,连接丢失 我正在按如下方式设置连接: NSURL *url = [[NSU
NSURL *url = [[NSURL URLWithString:[Common baseUrl]] URLByAppendingPathComponent:@"api/iCat/wishlists/upload"];
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url cachePolicy:NSURLRequestReloadIgnoringLocalCacheData timeoutInterval:60.f];
NSString *jsonString = [self generateStrippedJsonForWishlist:wishlist];
NSData *requestData = [jsonString dataUsingEncoding:NSUTF8StringEncoding];
[request setHTTPMethod:@"POST"];
[request setValue:@"application/json" forHTTPHeaderField:@"Accept"];
[request setValue:@"application/json; charset=utf-8" forHTTPHeaderField:@"Content-Type"];
[request setValue:[NSString stringWithFormat:@"%d", [jsonString lengthOfBytesUsingEncoding:NSUTF8StringEncoding]] forHTTPHeaderField:@"Content-Length"];
[request setHTTPBody:requestData];
以及启动与以下各项的连接:
connection = [[NSURLConnection alloc] initWithRequest:request delegate:self];
最终,请求将超时,并显示“网络连接丢失”错误消息。在我看来,应用程序似乎从未完全完成消息正文的编写
从api方面看,该方法从未真正被调用(断点未被命中)。但是如果我不带任何人发送请求,那么它就会发送
我已经使用curl测试了相同的调用,它按照预期工作:
curl -v -i -X POST -H "Content-Type: application/json" -d '{"CreatedBy":"iPad Simulator","ContactName":"Ddd","ContactEmail":"ddd","Products":[{"ProductId":117,"ProductName":"Internal doors - deco","Specification":""}]}' http://SCMOBILE02:1861/api/iCat/wishlists/upload
在发布json数据时尝试库。您可以尝试下面的代码吗
-(void) post
{
NSString * a = @"{company_name : \"com\"}";
NSString * URL = @"yourUrl";
NSString *post = [NSString stringWithFormat: @"%@",a];
NSData *postData = [post dataUsingEncoding:NSASCIIStringEncoding allowLossyConversion:YES];
NSString *postLength = [NSString stringWithFormat:@"%lu", (unsigned long)[postData length]];
NSMutableURLRequest *request = [[NSMutableURLRequest alloc] init] ;
[request setURL:[NSURL URLWithString:URL]];
[request setHTTPMethod:@"POST"];
[request setValue:@"application/json" forHTTPHeaderField:@"Accept"];
[request setValue:@"application/json; charset=utf-8" forHTTPHeaderField:@"Content-Type"];
[request setTimeoutInterval:20.0];
[request setHTTPBody:postData];
[NSURLConnection connectionWithRequest:request delegate:self];
}
在您的web api中,您应该具有如下类和post方法
public class company
{
public string company_name { get; set; }
}
// POST api/values
public void Post([FromBody]company value)
{
var t = value;
}
你能发布你的方法不起作用吗?requestData是否为零?jsonString中有什么?在本例中,json字符串是:{“CreatedBy”:“iPad模拟器”,“ContactName”:“Sss”,“ContactEmail”:“Sss”,“Products”:[{“ProductId”:117,“ProductName”:“Internal doors-deco”,“Specification”:“}]}否,requestData不是零。正如我提到的,连接:didSendBodyData:TotalBytesWrite:totalBytesExpectedToWrite:返回整个正文已写入服务器。没有调用任何其他委托方法,也没有触发服务器方法。是否可以使用fiddler()捕获发送到服务器的请求头和消息?很值得与有效的CURL请求进行比较。如果你也把它贴到你的问题上,它可能会帮助其他人诊断这个问题。