0

サーバーに接続しようとすると、コードで奇妙なことが起こります...承認された資格情報を使用すると、応答の戻り値のステータスコードは「OK」になります(それに満足しています)しかし、承認されていない資格情報を使用してログインすると、ステータスコードの応答は「許可されていません」代わりに「リモート サーバーがエラーを返しました: 見つかりませんでした」というメッセージが表示されました。

//Request
   public void ConnexionNT(string password,string user)

    { 
        try
        {

            HttpWebRequest request= (HttpWebRequest)HttpWebRequest.Create(URL_CONNEXION);

            request.Method = "GET";

            request.Credentials = new NetworkCredential(user, password, domain);

            request.CookieContainer = _cookiecontainer;

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

        }

        catch(HttpRequestException)
        {
            MessageBox.Show("Un problème de connexion avec  le serveur a eu lieu.", "Echec Authentification", MessageBoxButton.OK);
        }
        catch (Exception )
        {
            MessageBox.Show("Une erreur a eu lieu","Echec Authentification", MessageBoxButton.OK);
        }

    }  

    //Response
    private void GetResponse(IAsyncResult MyresponseAsync)
    {

            HttpWebRequest request = (HttpWebRequest)MyresponseAsync.AsyncState;

            if (request != null)
            {
                try
                {
                  //CRASH HERE//  HttpWebResponse response = (HttpWebResponse)request.EndGetResponse(MyresponseAsync);

                     if(response.StatusCode==HttpStatusCode.OK)//l'authentification a réussi
                     {
                         if (event_Authorized != null)
                          event_Authorized.Invoke();

                         if (response.Cookies != null && response.Cookies.Count>0)//on récupere le cookie de navigation
                         {
                             App._cookiecollection = response.Cookies;

                         }

                     }
                     else if (response.StatusCode == HttpStatusCode.Unauthorized)//l'authentification a échoué
                     {
                         if (event_Unauthorized != null)
                             event_Unauthorized.Invoke();

                     }
                     else if (response.StatusCode == HttpStatusCode.NotFound)//Erreur serveur
                     {

                     }           

                }

                catch (WebException)
                {
                    MessageBox.Show("Erreur de connexion", "erreur getresponse", MessageBoxButton.OK);
                }


            }
    }
4

1 に答える 1

0

ここで何が起こっているのかわかりました...応答で取得されたステータスコードが「Notfound」または「Unauthorized」の場合、Webexception がスローされるため、応答のプロパティを確認したい場合は、catch 内で行う必要があります例外...これはWindows phoneの場合のみのようです...これが私のために働いたコードです:

        private void GetResponseIdentificationNT(IAsyncResult MyresponseAsync)
    {

        HttpWebRequest request = (HttpWebRequest)MyresponseAsync.AsyncState;

        if (request != null)
        {
            try
            {

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

                if (response.StatusCode == HttpStatusCode.OK)//l'authentification a réussi
                {
                    if (event_Authorized != null)
                        event_Authorized.Invoke();

                }   
            }

            catch (WebException we)
            {
                HttpWebResponse response = (HttpWebResponse)we.Response;

                if (response.StatusCode==HttpStatusCode.Unauthorized)
                {
                    if (event_Unauthorized != null)
                        event_Unauthorized.Invoke();

                }
                else if (response.StatusCode == HttpStatusCode.NotFound)//Server error
                {
                    if (event_NotFound != null)
                        event_NotFound.Invoke();

                }

            }

            catch (Exception ex)
            {
               throw new UnknowException(ex.Message);
            }
        }
    } 
于 2014-01-16T10:20:55.283 に答える