#objective-c #nsmutableurlrequest
#objective-c #nsmutableurlrequest
Вопрос:
У меня возникли проблемы с моим запросом к веб-службе asp .net mvc. Некоторое время назад я прочитал в теме, что можно выяснить, каким сервер хочет, чтобы тип содержимого запроса был и т.д. Я не получаю никакой ошибки при компиляции, но когда я выполняю фактический запрос, ничего не происходит, и в журнале сервера указано только (null) (нуль). Нет проблем с выполнением запроса GET и привязкой всех объектов, которые есть в списке. Кто-нибудь, пожалуйста, может помочь мне с этой раздражающей ошибкой? вот код:
//----------------GET request to webservice works fine----------------------------------------
NSMutableURLRequest *request = [[NSMutableURLRequest alloc] initWithURL: url];
[request setHTTPMethod: @"GET"];
NSData *response = [NSURLConnection sendSynchronousRequest: request returningResponse: nil error: nil];
NSString *stringResponse = [[NSString alloc] initWithData: response encoding: NSUTF8StringEncoding];
//NSLog(@"stringResponse is %@", stringResponse);
//--------------------------------------------------------------------------------------------
NSString *twitterTrendsUrl=@"http://search.twitter.com/trends.json";
NSString *output=
[NSString stringWithContentsOfURL:[NSURL URLWithString:twitterTrendsUrl]];
id theObject= [output JSONValue];
NSLog(@"TWITTER: %@",theObject);
*/
//--------------------------------------------------------------------------------------------
NSURL *url = [NSURL URLWithString:@"http://errorreport.abou.se/Errors/1.0"];
//NSString *jsonRequest = @"{"Description":"Gurras Description","Category":"Klotter"}";
//NSString *jsonRequest = @"{"Description":"Gurras Description","Category":"Klotter","Address":"smedjegatan","StreetNumber":"34","Feedback":"True","FeedbackWay":"Telefon"}";
NSMutableDictionary* jsonObject = [NSMutableDictionary dictionary];
//NSMutableDictionary* metadata = [NSMutableDictionary dictionary];
//[metadata setObject:@"NewLoc" forKey:@"Uri"];
//[metadata setObject:@"Location.NewLoc" forKey:@"Type"];
//[jsonObject setObject:metadata forKey:@"__metadata"];
[jsonObject setObject:@"Gurras" forKey:@"Description"];
[jsonObject setObject:@"Klotter" forKey:@"Category"];
[jsonObject setObject:@"smedjegatan" forKey:@"Address"];
[jsonObject setObject:@"34" forKey:@"StreetNumber"];
[jsonObject setObject:@"True" forKey:@"Feedback"];
[jsonObject setObject:@"Telefon" forKey:@"FeedbackWay"];
// ... complete the other values
//
NSString* jsonRequest = [jsonObject JSONRepresentation];
// jsonString now contains your example strings.
NSLog(@"Request: %@", jsonRequest);
//NSURL *url = [NSURL URLWithString:@"https://mydomain.com/Method/"];
NSMutableURLRequest *request = [[NSMutableURLRequest alloc] initWithURL:url];
NSData *requestData = [NSData dataWithBytes:[jsonRequest UTF8String] length:[jsonRequest length]];
[request setHTTPMethod:@"POST"];
[request setValue:@"application/json" forHTTPHeaderField:@"Accept"];
[request setValue:@"application/json" forHTTPHeaderField:@"Content-Type"];
[request setValue:@"json" forHTTPHeaderField:@"Data-Type"];
[request setValue:[NSString stringWithFormat:@"%d", [requestData length]] forHTTPHeaderField:@"Content-Length"];
[request setHTTPBody: requestData];
//[NSURLConnection connectionWithRequest:[request autorelease] delegate:self];
NSData *returnData = [NSURLConnection sendSynchronousRequest: request returningResponse: nil error: nil ];
NSString *returnString = [[NSString alloc] initWithData:returnData encoding: NSUTF8StringEncoding];
NSLog(@"returnData: %@", returnString);
Я также могу добавить пример того, как взаимодействовать с сервисом с помощью javascript:
<script type="text/javascript">
var obj = { "Description": "det kanske funkar" };
$(document).ready(function () {
$.ajax({
type: "POST",
url: "/Errors/1.0",
dataType: "json",
contentType: "application/json",
processData: true,
data: '{"Description": "STeffeent asdasd", "Category": "Miljö", "Address": "Bogatan","StreetNumber": "14", "Feedback": "true", "FeedbackWay": "Brev"}',
success: function (data) {
$("#result").text(data.Description);
}
});
});
Комментарии:
1. Возможно, стоит сначала проверить все параметры вашего запроса, используя другой инструмент. SoapUI хорош ( soapui.org )
2. Как вы думаете, это похоже на RestClient? Потому что я пробовал это там, и никаких проблем с подключением к серверу не возникло.
3. поскольку это не Soap-сообщение, работает ли soapui вообще?
4. Я не использую RestClient, но я часто использую SoapUI при отладке подобных служб REST. Это действительно хорошо работает с запросами JSON. В документации есть руководство по началу работы: soapui.org/REST-Testing/getting-started.html . Всегда лучше отделять отладку сервера от отладки вашего собственного кода. Иногда я обнаруживал, что, хотя сервер, кажется, работает нормально, одно крошечное изменение в параметрах запроса означает, что вы вообще не получаете ответа или просто выдаете ошибку. Это действительно зависит от сервера.
5. Решили проблему, ребята! Пытался вставить решение в ответ, но не могу сделать это до завтра. Благодаря SoapUI и Колину я правильно определил параметры запроса. Оказалось, что в объекте JSON были некоторые ошибки. Некоторые параметры, как ожидалось, будут строками, и я отправил целые числа и так далее.