4

作ろうとするとエラーHttpWebRequestが返ってきSystem.Net.ProtocolViolationExceptionます。

private void txtGo_Click(object sender, RoutedEventArgs e)
    {
        WebRequest client =
            WebRequest.Create("http://api.worldweatheronline.com/free/v1/weather.ashx?q=London&format=json&num_of_days=5&key=jdbcn8yuwebwybxjpqzzxyhy");
        client.ContentType = "application/json";
        client.BeginGetResponse(ReadWebRequestCallBack, client);
    }

    private void ReadWebRequestCallBack(IAsyncResult callBackResult)
    {
        var myRequest = (HttpWebRequest) callBackResult.AsyncState;
        if(myRequest != null)
        {
            try
            {
                var response = (HttpWebResponse)myRequest.EndGetResponse(callBackResult);
                txtContent.Text = response.StatusCode.ToString();
            }
            catch(WebException ex)
            {
                txtContent.Text = ex.Message;
            }
        }
    }

この行を削除するclient.ContentType = "application/json";と、以下の別のエラーが発生します

 {System.Net.WebException: The remote server returned an error: NotFound. ---> System.Net.WebException: The remote server returned an error: NotFound.
   at System.Net.Browser.ClientHttpWebRequest.InternalEndGetResponse(IAsyncResult  asyncResult)
  at System.Net.Browser.ClientHttpWebRequest.<>c__DisplayClasse.<EndGetResponse>b__d(Object sendState)
  at System.Net.Browser.AsyncHelper.<>c__DisplayClass1.<BeginOnUI>b__0(Object sendState)
   --- End of inner exception stack trace ---
   at System.Net.Browser.AsyncHelper.BeginOnUI(SendOrPostCallback beginMethod, Object state)
   at System.Net.Browser.ClientHttpWebRequest.EndGetResponse(IAsyncResult asyncResult)
   at MyClimate.MainPage.ReadWebRequestCallBack(IAsyncResult callBackResult)}
base: {System.Net.WebException: The remote server returned an error: NotFound. ---> System.Net.WebException: The remote server returned an error: NotFound.
   at System.Net.Browser.ClientHttpWebRequest.InternalEndGetResponse(IAsyncResult as yncResult)
   at System.Net.Browser.ClientHttpWebRequest.<>c__DisplayClasse.   <EndGetResponse>b__d(Object sendState)
   at System.Net.Browser.AsyncHelper.<>c__DisplayClass1.<BeginOnUI>b__0(Object sendState)
   --- End of inner exception stack trace ---
   at System.Net.Browser.AsyncHelper.BeginOnUI(SendOrPostCallback beginMethod, Object state)
   at System.Net.Browser.ClientHttpWebRequest.EndGetResponse(IAsyncResult asyncResult)
   at MyClimate.MainPage.ReadWebRequestCallBack(IAsyncResult callBackResult)}
   Response: {System.Net.Browser.ClientHttpWebResponse}
   Status: UnknownError
4

3 に答える 3

4

PostおよびgetメソッドSystem.Net.ProtocolViolationExceptionがないため、これを取得します。これがあなたを助けることを願っています。

        HttpWebRequest request = (HttpWebRequest)WebRequest.Create(Uri);

        request.ContentType = "application/x-www-form-urlencoded";
        request.UserAgent = "Mozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.2; WOW64; Trident/6.0; Touch)";
        request.CookieContainer = cookie;
        request.AllowAutoRedirect = true;
        // Set the Method property to 'POST' to post data to the URI.
        request.Method = "POST";

        // start the asynchronous operation
        request.BeginGetRequestStream(new AsyncCallback(CRequest), request);
于 2013-05-14T06:05:45.067 に答える
0

このように使用すると、コードで機能します

client.ContentType = "application/x-www-form-urlencoded";と書くだけ です。 およびclient.Method = "POST"; あなたのtxtGo_clickボタンで、あなたのコードでこのメソッドを使用してください

    private void ReadWebRequestCallBack(IAsyncResult callBackResult)
    {
        var myRequest = (HttpWebRequest)callBackResult.AsyncState;
        if (myRequest != null)
        {
            try
            {
                HttpWebResponse response = (HttpWebResponse)myRequest.EndGetResponse(callBackResult);
                Dispatcher.BeginInvoke(delegate() { txtContent.Text = response.StatusCode.ToString(); });
            }
            catch (WebException ex)
            {
                Dispatcher.BeginInvoke(delegate() { txtContent.Text = ex.Message; });
            }
        }
    }
于 2013-09-05T09:41:27.267 に答える