Как установить параметры публикации в классе WebClient в приложении Silverlight - PullRequest
0 голосов
/ 31 марта 2010

Прежде всего, я написал простую страницу php, которая выбирает некоторые переменные из параметров POST, таких как запрос и строку аутентификации, и возвращает результат в виде xml. Я намереваюсь вызвать эту страницу с помощью класса WebClient из приложения Silverlight. Я использую POST, потому что мы запрашиваем базу данных любым допустимым оператором sql, а не только оператором select. Класс WebClient использует метод UploadDataAsync для публикации на http-сервере, однако он требует, чтобы параметры публикации передавались как NameValueCollection. Этот класс отсутствует во время выполнения Silverlight. Как мне поступить ???

Ответы [ 2 ]

1 голос
/ 03 декабря 2011
        WebClient webClient = new WebClient();
        webClient.Headers["content-type"] = "application/x-www-form-urlencoded";
        webClient.Encoding = Encoding.UTF8;
        webClient.UploadStringCompleted += new UploadStringCompletedEventHandler(webClient_UploadStringCompleted);
        webClient.UploadStringAsync(new Uri(courseListUrl, UriKind.Absolute), "POST", apend);

Где apend - ваша строка, которую вы отправляете по POST-методу

после этого UploadCompleteMethod:

 void webClient_UploadStringCompleted(object sender, UploadStringCompletedEventArgs e)
 {
      string k = e.Result;
 }

Если вы хотите использовать Cookies внутри WebClient, вы также можете сделать это, но вы должны создать класс Descendant из WebClient, например:

 public class CookieAwareWebClient : WebClient
 {
    private CookieContainer m_container = new CookieContainer();

    [System.Security.SecuritySafeCritical]
    public CookieAwareWebClient() : base() { }


    protected override WebRequest GetWebRequest(Uri address)
    {
        WebRequest request = base.GetWebRequest(address);
        if (request is HttpWebRequest)
        {
            (request as HttpWebRequest).CookieContainer = m_container;
        }
        return request;
    }
}

после этого вы просто меняете WebClient webClient = new WebClient(); на CookieAwareWebClient webClient = new CookieAwareWebClient();

1 голос
/ 01 апреля 2010

Используйте API WebRequest вместо API WebClient.

var request = WebRequest.Create(requestUriString);

request.Method = "POST";

request.BeginGetRequestStream()
...