2

私はこのコードを持っています:

        private HttpWebRequest request;
        private HttpWebResponse wResponse;
        private CookieContainer cookieContainer = new CookieContainer();
        #region PRIVATE METHODS
        private void RunRequest(string url)
        {
            request = HttpWebRequest.Create(new Uri(url)) as HttpWebRequest;
            request.UserAgent = "Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_6_7; en-US) AppleWebKit/534.16 (KHTML, like Gecko) Chrome/10.0.648.205 Safari/534.16";
            request.ContentType = "application/x-www-form-urlencoded";
            request.CookieContainer = cookieContainer;
            request.Method = "GET";

            StartWebRequest(request);

            //Do smthng
            while (wResponse == null) { }
        }

        private void StartWebRequest(HttpWebRequest request)
        {
            request.BeginGetResponse(FinishWebRequest, request);
        }

        private void FinishWebRequest(IAsyncResult result)
        {
            wResponse = (result.AsyncState as HttpWebRequest).EndGetResponse(result) as HttpWebResponse;
        }
        #endregion

また、wRequest 変数には応答が入力されていません。AsyncState で私はこれを持っています: HttpWebRequest エラー

何が問題なのですか?

psデスクトップアプリでも同じコードがうまく機能します。

ありがとう、パベル。

4

2 に答える 2

2

コードには 2 つの問題があります。

  1. 非同期コールバック メソッドを適切に使用していません:

    交換

    request.BeginGetResponse(FinishWebRequest, request);

    request.BeginGetResponse(new AsyncCallback(FinishWebRequest), request);

  2. GET リクエストの Content-Type の指定は無効です。POST リクエストには必須です。変更RunRequest()方法:

    private void RunRequest(string url, string method)
    {
        request = HttpWebRequest.Create(new Uri(url)) as HttpWebRequest;
        request.UserAgent = "Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_6_7; en-US) AppleWebKit/534.16 (KHTML, like Gecko) Chrome/10.0.648.205 Safari/534.16";
        request.Method = method; // method can be GET, POST etc.
        if (method == "POST")
            request.ContentType = "application/x-www-form-urlencoded";
        request.CookieContainer = cookieContainer;
        ...
    }
    
于 2012-05-19T17:09:18.830 に答える
1

GET 操作を使用しているときに ContentType を指定する理由はありません。それを削除すると、問題が解決するはずです!

于 2012-05-19T15:49:41.353 に答える