2017-07-24 91 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));