Silverlight HTTP POST - PullRequest
       22

Silverlight HTTP POST

2 голосов
/ 07 октября 2009

Я просто пытаюсь выполнить http сообщение на http://www.test.com/test.asp?test1=3. Вот код, который я пытался использовать:

    private void pif_test_conn()
    {


        Uri url = new Uri("http://www.test.com/test.asp?test1=3", UriKind.Absolute);



        if (httpResult == true)
        {


            HttpWebRequest request = (HttpWebRequest)HttpWebRequest.Create(url);
            request.ContentType = "application/x-www-form-urlencoded";
            request.Method = "POST";
           request.BeginGetResponse(new AsyncCallback(ReadCallback), request); 

        }



        return ;
    }


   private void ReadCallback(IAsyncResult asynchronousResult)
    {


        HttpWebRequest request = (HttpWebRequest)asynchronousResult.AsyncState;


        HttpWebResponse response =  (HttpWebResponse)request.EndGetResponse(asynchronousResult);

        using (StreamReader streamReader1 =  new StreamReader(response.GetResponseStream()))
        {

            string resultString = streamReader1.ReadToEnd();

             MessageBox.Show("Using HttpWebRequest: " + resultString, "Found", MessageBoxButton.OK);             
        }

    }

Когда я выполняю этот код, моя программа вызывает событие Application_UnhandledException. Не уверен, что я делаю не так.

Ответы [ 4 ]

6 голосов
/ 07 октября 2009

Вы пытаетесь отправить на другой хост? Такое поведение может привести к проблемам с безопасностью XSS, поэтому оно недоступно.


string responseValue = "";
AutoResetEvent syncRequest = new AutoResetEvent(false);
Uri address = new Uri(HtmlPage.Document.DocumentUri, "/sample.aspx");

WebRequest request = WebRequest.Create(address);
request.Method = "POST";
request.BeginGetRequestStream(getRequestResult =>
{
    // Send packet data
    using (Stream post = request.EndGetRequestStream(getRequestResult))
    {
        post.Write(buffer, 0, buffer.Length);
        post.Close();
    }

    // wait for server response
    request.BeginGetResponse(getResponseResult =>
    {
        WebResponse response = request.EndGetResponse(getResponseResult);
        responseValue=new StreamReader(response.GetResponseStream()).ReadToEnd();

        syncRequest.Set();

    }, null);

}, null);

syncRequest.WaitOne();

MessageBox.Show(
    "Using WebRequest: " + responseValue, 
    "Found", MessageBoxButton.OK);

НТН

4 голосов
/ 07 октября 2009

Вы можете отправлять только HTTP-запросы в домен, откуда приходит ваше приложение.

Это ограничение предотвращает XSS атаки.

1 голос
/ 14 июля 2010

По поводу ответа Рубенса ,

Если вы уйдете в вызов SyncRequest.WaitOne(), вызов будет заблокирован, по крайней мере, в Silverlight 4.0.

0 голосов
/ 07 октября 2009

Чтобы отправить HTTP POST, необходимо записать данные POST в запрос, вызвав метод BeginGetRequestStream.

Возможно, поэтому вы получаете исключение; пожалуйста, сообщите нам, какое исключение вы получите для более конкретного ответа.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...