Estoy tratando de hacer una aplicación winforms para que cuando se haga clic en algo, revise una página web para ver su respuesta.

He probado la página web para ver si es un error de PHP, pero funciona bien desde ese lado.

Está ignorando por completo la instrucción else if y salta a la instrucción else debajo, aunque la respuesta sea "Sin asignar".

Aquí está mi código:

private void button1_Click(object sender, EventArgs e)
    {
        HttpWebRequest request = (HttpWebRequest)WebRequest.Create("http://fms.psrpc.co.uk/apiconfirmD.php?" + ApiKey);
        HttpWebResponse response = (HttpWebResponse)request.GetResponse();

        using (response)
        {
            StreamReader reader = new StreamReader(response.GetResponseStream());
            if (reader.ReadToEnd() == "Changed")
            {
                label2.Visible = false;
                button1.Enabled = false;
                button2.Enabled = true;
                button3.Enabled = true;
                button4.Enabled = true;
                button5.Enabled = true;
                button6.Enabled = true;
                button7.Enabled = true;
                button8.Enabled = true;
                timer1.Enabled = true;
            }
            else if (reader.ReadToEnd() == "Unassigned")
            {
                string message = "Error Code: B66794O37945O46791K@@Error booking on.@Please make sure you have been assigned to a vehicle.@@If this error persists please contact K.McCrudden.";
                message = message.Replace("@", "" + System.Environment.NewLine);
                string title = "Error!";

                MessageBoxButtons buttons = MessageBoxButtons.OK;
                DialogResult result = MessageBox.Show(message, title, buttons, MessageBoxIcon.Error, MessageBoxDefaultButton.Button2);
            }
            else
            {
                string message = "Error Code: B002875O46883O84655K@@Error booking on.@Please make sure you have booked a shift and have been assigned.@@If this error persists please contact K.McCrudden.";
                message = message.Replace("@", "" + System.Environment.NewLine);
                string title = "Error!";

                MessageBoxButtons buttons = MessageBoxButtons.OK;
                DialogResult result = MessageBox.Show(message, title, buttons, MessageBoxIcon.Error, MessageBoxDefaultButton.Button2);
            }
        }
    }
1
KjayCopper 14 nov. 2017 a las 15:42

2 respuestas

La mejor respuesta

No, no se está ignorando. Estás leyendo todos los datos en tu primer bloque if llamando a reader.ReadToEnd(). De esta manera, no hay más datos disponibles para leer en su declaración else if; devuelve una cadena vacía. Por lo tanto, la condición no coincide y se ejecuta el bloque else final.

Modifique el código como se muestra a continuación. Observe la variable temporal data en el código siguiente.

StreamReader reader = new StreamReader(response.GetResponseStream());
string data = reader.ReadToEnd();//Read the data in temp variable.
//Use this variable to check the conditions further.
if (data == "Changed")
{
    //Your code here
}
else if (data == "Unassigned")
{
    //Your code here
}
else
{
    //Your code here
}
4
Amit Joshi 14 nov. 2017 a las 14:08

Tiene un error en su lógica general. Cuando ingresa la primera declaración if, está leyendo hasta el final de la secuencia con el código reader.ReadToEnd(). En la siguiente declaración (la else), está leyendo la secuencia de nuevo, pero ya se ha leído, por lo que devolverá una cadena vacía, por lo que la última declaración else se activará de manera efectiva.

También puede leer sobre esto en MSDN: Método StreamReader.ReadToEnd () .

Definición del valor de retorno:

El resto de la secuencia como una cadena, desde la posición actual hasta el final. Si la posición actual está al final de la secuencia, devuelve una cadena vacía ("").

El código debería tener este aspecto:

StreamReader reader = new StreamReader(response.GetResponseStream());
var result = reader.ReadToEnd();

if(result == "Changed")
{
    label2.Visible = false;
    button1.Enabled = false;
    button2.Enabled = true;
    button3.Enabled = true;
    button4.Enabled = true;
    button5.Enabled = true;
    button6.Enabled = true;
    button7.Enabled = true;
    button8.Enabled = true;
    timer1.Enabled = true;
}
else if(result == "Unassigned")
{
    string message = "Error Code: B66794O37945O46791K@@Error booking on.@Please make sure you have been assigned to a vehicle.@@If this error persists please contact K.McCrudden.";
    message = message.Replace("@", "" + System.Environment.NewLine);
    string title = "Error!";

    MessageBoxButtons buttons = MessageBoxButtons.OK;
    DialogResult result = MessageBox.Show(message, title, buttons, MessageBoxIcon.Error, MessageBoxDefaultButton.Button2);
}
else
{
    string message = "Error Code: B002875O46883O84655K@@Error booking on.@Please make sure you have booked a shift and have been assigned.@@If this error persists please contact K.McCrudden.";
    message = message.Replace("@", "" + System.Environment.NewLine);
    string title = "Error!";

    MessageBoxButtons buttons = MessageBoxButtons.OK;
    DialogResult result = MessageBox.Show(message, title, buttons, MessageBoxIcon.Error, MessageBoxDefaultButton.Button2);
}
2
Abbas 14 nov. 2017 a las 12:48