Windows phone 7: отправить некоторые значения, получить ответ

Как я могу опубликовать значение на онлайн-странице, а затем получить ответ, чтобы поместить его в строку? Это PHP-страница, которая принимает значение $_POST, а затем выводит ответ, который я хочу получить.


person Zak    schedule 15.06.2011    source источник


Ответы (1)


Посмотрите на HttpWebRequest.

public void DoWork()
{
    var url = "http://posttestserver.com/post.php";
    // Create the web request object
    HttpWebRequest webRequest = (HttpWebRequest)WebRequest.Create(url);
    webRequest.Method = "POST";
    webRequest.ContentType = "application/x-www-form-urlencoded";
    // Start the request
    webRequest.BeginGetRequestStream(new AsyncCallback(GetRequestStreamCallback), webRequest);    
}
void GetRequestStreamCallback(IAsyncResult asynchronousResult)
{
    HttpWebRequest webRequest = (HttpWebRequest)asynchronousResult.AsyncState;
    // End the stream request operation
    Stream postStream = webRequest.EndGetRequestStream(asynchronousResult);
    // Create the post data
    // Demo POST data 
    string postData = "Username=MyUserName&password=MyPassword";
    byte[] byteArray = Encoding.UTF8.GetBytes(postData);
    // Add the post data to the web request
    postStream.Write(byteArray, 0, byteArray.Length);
    postStream.Close();
    // Start the web request
    webRequest.BeginGetResponse(new AsyncCallback(GetResponseCallback), webRequest);
}

void GetResponseCallback(IAsyncResult asynchronousResult)
{
    try
    {
        HttpWebRequest webRequest = (HttpWebRequest)asynchronousResult.AsyncState;
        HttpWebResponse response;
        // End the get response operation
        response = (HttpWebResponse)webRequest.EndGetResponse(asynchronousResult);
        Stream streamResponse = response.GetResponseStream();
        StreamReader streamReader = new StreamReader(streamResponse);
        var Response = streamReader.ReadToEnd();
        streamResponse.Close();
        streamReader.Close();
        response.Close();
    }
    catch (WebException e)
    {
        // Error treatment
        // ...
    }
}

private void button1_Click(object sender, RoutedEventArgs e)
{
    DoWork();
}

его код немного адаптирован из этого вопроса

person ZombieSheep    schedule 15.06.2011
comment
хорошо, я думаю, это работает. но где я могу получить свой ответ? если я использую: var Response = streamReader.ReadToEnd(); MessageBox.Show(Response.ToString()); я получаю сообщение об ошибке - person Zak; 16.06.2011
comment
streamReader.ReadToEnd() уже возвращает строку, поэтому .ToString() является избыточным. Предполагая, что вы создаете MessageBox в методе GetResponseCallback(), имейте в виду, что вы находитесь в новом потоке, поэтому, чтобы открыть окно сообщения, вам нужно вызвать его как Dispatcher.BeginInvoke(() => MessageBox.Show(Response)); - person ZombieSheep; 16.06.2011
comment
Да, ты прав! :-P, но теперь, последний вопрос, чтобы понять эту вещь, как я могу прикрепить значение поля к данным сообщения? я сделал это, но получаю сообщение об ошибке: string postData = language=en&value= + testo.Text; - person Zak; 17.06.2011
comment
как я могу поместить значение textBox в строки сообщения??? я получаю сообщение об ошибке недопустимого поперечного потока - person Zak; 21.06.2011
comment
Вы можете либо сохранить значение в строке перед вызовом фонового потока (простой способ), либо использовать диспетчер для получения значения внутри метода. См. stackoverflow.com/questions/710034/ для примеров. Извините, я не могу дать вам код напрямую, так как сейчас в отпуске. :) - person ZombieSheep; 21.06.2011
comment
Возможно, отметьте этот ответ как принятый и спросите еще раз в новом вопросе. Как я уже сказал, я в отпуске, поэтому не могу дать вам ответ, но запуск нового вопроса для этой дополнительной информации даст вам больше ответов. - person ZombieSheep; 21.06.2011