2017-07-24 150 views
1

我真的很陌生,并且在一般的API请求中,所以不确定我的代码是否有意义。现在我只是想从我的API的URL调用中获取数据,并将其显示在名为testTextTextView上。我愿意使用RestSharpHttpClient,无论我可以上班。无法从'字符串'转换为'System.Net.Http.HttpRequestMessage'

public class MainActivity : Activity 
{ 

    HttpClient client; 

    protected override void OnCreate(Bundle bundle) 
    { 
     base.OnCreate(bundle); 
     SetContentView(Resource.Layout.Main); 
    } 

    public async Task<string> GetResponseString() 
    { 
     var request = "http://localhost:51843/api/values/getMessage?id=1"; 
     var response = await client.SendAsync(request); 
     var content = await response.Content.ReadAsStringAsync(); 
     return content; 
    } 
} 

在我的公共async Task<>方法就是我得到的

无法从 '字符串' 到 'System.Net.Http.HttpRequestMessage'

误差为request转换变量。我留下了所有其他尝试的意见,让我知道如果我应该尝试其中的任何一种

+0

请去掉所有不需要说明你的问题的注释代码中的同步版本,它只是使你的问题更难阅读 – Jason

+0

完成,抱歉让那些人认为这是一条更好的路线。 –

回答

2

您还可以使用正在取得HttpClient.GetAsyncHttpClient.PostAsync取决于请求的性质。这些方法确实有重载,其中包含string URI。

例如

HttpClient client = new HttpClient(); 
public async Task<string> GetResponseString() { 
    var request = "http://localhost:51843/api/values/getMessage?id=1"; 
    var response = await client.GetAsync(request); 
    var content = await response.Content.ReadAsStringAsync(); 
    return content; 
} 

下面是同样的方法

HttpClient client = new HttpClient(); 
public string GetResponseString() { 
    var request = "http://localhost:51843/api/values/getMessage?id=1"; 
    var response = client.GetAsync(request).Result; 
    var content = response.Content.ReadAsStringAsync().Result; 
    return content; 
} 
+0

你和Jasons解决方案都可以工作,但是现在我在调用GetResponseString()方法时遇到了麻烦,将其设置为等于一个新变量并试图更改我的textView文本。错误是'不能隐式地将类型'System.Threading.Tasks.Task '转换为'string'' –

+0

该方法返回一个'任务'您必须从任务的'.Result'属性中获取它,但是由于混合异步/等待和阻塞调用会导致死锁。 – Nkosi

+0

我看到了,对不起,我是这个品牌的新手,所以有没有不同的方式来解决这个问题,不会导致僵局? –

4

SendAsync的参数为HttpRequestMessage,并且您正在传递一个字符串。这正是错误告诉你的。

如果您查找HttpRequestMessage,它需要一种方法和URI

var url = "http://localhost:51843/api/values/getMessage?id=1"; 
var req = new HttpRequestMessage(HttpMethod.POST, new Uri(url));