簡體   English   中英

使用PostAsync,HttpClient和Json從Windows Phone 8.1調用REST

[英]Calling REST from Windows Phone 8.1 using PostAsync, HttpClient & Json

我的問題與使用PostAsync,HttpClient和Json從C#Metro UI Client調用MVC4 WebAPI方法非常相似,這不足以解決我的問題。

這是我在Windows Phone 8.1項目中的代碼:

using (var httpClient = new HttpClient())
            {
                httpClient.BaseAddress = new Uri(baseAddress);
                httpClient.DefaultRequestHeaders.Accept.Clear();
                httpClient.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
                httpClient.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Basic", "YW5vbnltb3VzOmFub255bW91cw==");

                var message = "{ \"userName\" : \"WebAppUser\", \"password\" : \"M@mie!duCanta1l\" }";
                var json_object = JsonConvert.SerializeObject(message);


                HttpContent content = new StringContent(json_object.ToString(), Encoding.UTF8);
                content.Headers.ContentType = new MediaTypeHeaderValue("application/json");


                HttpResponseMessage response = httpClient.PostAsync(baseAddress + "/s/VpCredentials/1.0/IAuthentication/REST_JSON/Validate", content).Result;
                string statusCode = response.StatusCode.ToString();

                response.EnsureSuccessStatusCode();
                Task<string> responseBody = response.Content.ReadAsStringAsync();
            }

responseBody始終會返回其中包含https://m.vente-privee.com/f/fail_int.png的一小段html,表示調用失敗。 ChromePostman中內置的同一調用將返回以下成功字符串:

{
    "ValidateResult": {
        "Expiration": "/Date(1404214568532+0200)/",
        "Token": "P36Hm9K9zI1gm75hfOqI6hudfdGw8y7Zu1fVgbaSHp7ayvfLUn4YtNxU/8siJ7Wa",
        "UserName": "WebAppUser"
    },
    "result": 1,
    "analytics": true
}

郵遞員成功呼叫屏幕截圖

您知道我的C#代碼在做什么錯嗎? 謝謝。

這里有兩個問題。

問題1-使用HttpClient BaseAddress

相關: 為什么HttpClient BaseAddress不起作用?

  1. 確保baseAddress以正斜杠( / )結尾。
  2. 在此調用中,不要使用前導斜杠( / ),也不要在baseAddress之前添加baseAddress ,它會自動添加:

    (問題)

     httpClient.PostAsync(baseAddress + "/s/VpCredentials/1.0/IAuthentication/REST_JSON/Validate", content).Result; 

    (已更正)

     httpClient.PostAsync("s/VpCredentials/1.0/IAuthentication/REST_JSON/Validate", content).Result; 

問題2-創建請求正文JSON

不要這樣做:

var message = "{ \"userName\" : \"WebAppUser\", \"password\" : \"M@mie!duCanta1l\" }";
var json_object = JsonConvert.SerializeObject(message);

那就是創建一個包含JSON的JSON序列化字符串-一種雙編碼形式,這很可能不是您想要的。 通常,您永遠都不應該在代碼中創建JSON數據字符串文字。

做這個:

var message = new
{
    userName = "WebAppUser",
    password = "M@mie!duCanta1l"
};
var json_object = JsonConvert.SerializeObject(message);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM