windows phone 8中使用c#的REST请求问题

本文关键字:REST 请求 问题 phone windows | 更新日期: 2023-09-27 18:10:00

我试图访问特定web服务器的一些其他服务为我的WP8应用程序,我不能做得很好。例如,这是我尝试登录用户时使用的代码。我必须传递一个字符串,表示一个Json object("参数")与用户名和密码和响应将是一个json对象太。我找不到在rest请求中传递这个参数的方法。这是代码;

public void login(string user, string passwrd)
{
    mLoginData.setUserName(user);
    mLoginData.setPasswd(passwrd);
    string serviceURL = mBaseURL + "/service/user/login/";
    string parameters = "{'"username'":'"" + mLoginData.getUserName() + "'",'"password'":'"" + mLoginData.getPasswd() + "'"}";
    //MessageBox.Show(parameters);
    //MessageBox.Show(serviceURL);
    //build the REST request
    HttpWebRequest request = (HttpWebRequest)WebRequest.Create(serviceURL);
    request.ContentType = "application/json";
    request.Method = "POST";
    //async request launchs "Gotresponse(...) when it has finished.
    request.BeginGetResponse(new AsyncCallback(GotResponse), request); 
}

private void GotResponse(IAsyncResult ar)
{
    try
    {
        string data;
        // State of request is asynchronous 
        HttpWebRequest myHttpWebRequest = (HttpWebRequest)ar.AsyncState;
        using (HttpWebResponse response = (HttpWebResponse)myHttpWebRequest.EndGetResponse(ar))
        {
            // Read the response into a Stream object. 
            Stream responseStream = response.GetResponseStream();
            using (var reader = new StreamReader(responseStream))
            {
                data = reader.ReadToEnd();
            }
            responseStream.Close();
        }
    }
    catch (Exception e)
    {
        string exception = e.ToString();
        throw;
    }
}

我也尝试了webClienthttpClient类,但没有任何结果。谢谢,对不起,我的英语不好。

windows phone 8中使用c#的REST请求问题

我用HttpClient类解决了这个问题。这是代码

public async void login(string user, string passwrd)
{

    string serviceURL = "";
    string parameters = "";
    HttpClient restClient = new HttpClient();
    restClient.BaseAddress = new Uri(mBaseURL);
    restClient.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
    HttpRequestMessage req = new HttpRequestMessage(HttpMethod.Post, serviceURL);
    req.Content = new StringContent(parameters, Encoding.UTF8, "application/json");
    HttpResponseMessage response = null;
    string responseBodyAsText = "";
    try
    {
        response = await restClient.SendAsync(req);
        response.EnsureSuccessStatusCode();
        responseBodyAsText = await response.Content.ReadAsStringAsync();
    }
    catch (HttpRequestException e)
    {
        string ex = e.Message;
    }
    if (response.IsSuccessStatusCode==true)
    {
        dynamic data = JObject.Parse(responseBodyAsText);
    }
    else
    {
        if (response.StatusCode == HttpStatusCode.Unauthorized)
        {
            MessageBox.Show("User or password were incorrect");
        }
        else
        {
            MessageBox.Show("NNetwork connection error");
        }
    } 
}

我没有正确设置请求的标头值。