尝试连接到以下Web方法时,将返回“请求格式无效”:

public string myWebMethod(string test)
{
    return "connected";
}

这是目标C代码:
NSString *seshID = @"test-session";
NSString *post = [NSString stringWithFormat:@"test=%@", seshID];
NSData *postData = [post dataUsingEncoding:NSASCIIStringEncoding allowLossyConversion:YES];
NSString *postLength = [NSString stringWithFormat:@"%d", [postData length]];

NSString *comparisonURLString = SERVER_COMPARE_URL_STRING;
NSURL *comparisonURL = [NSURL URLWithString: comparisonURLString];
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:comparisonURL];

[request setHTTPMethod:@"POST"];
[request addValue:postLength forHTTPHeaderField:@"Content-Length"];

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

NSString *response = [[NSString alloc] initWithData:responseData encoding:NSUTF8StringEncoding];
NSLog(response);

但是,如果我更改web方法使其不接受任何参数:
public string myWebMethod()

并将obj-c代码中的相应行更改为:
NSString *post = [NSString stringWithFormat:@""];

它的工作原理是:
<?xml version="1.0" encoding="utf-8"?>
<string xmlns="http://tempuri.org/">connected</string>

有谁能解释为什么后者看起来有效,但前者却不起作用?谢谢。

最佳答案

我在java webmethod和c之间遇到了类似的问题。通过从soapheader创建一个string1 inherant类并包含一个string[]解决了该问题。
以你为例,你可以试试这个

public string myWebMethod(string[] test)
{
    return "connected";
}


public string myWebMethod(char[] test)
{
    return "connected";
}

你也可以和fiddler一起检查到底传递了什么样的数据。

关于c# - “请求格式无效”,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/13492705/

10-09 02:19