Visualizzazione dei risultati da 1 a 8 su 8
  1. #1
    Utente di HTML.it
    Registrato dal
    Jan 2007
    Messaggi
    48

    [C#] Lettura dati da HTTPREQUEST

    Salve ragazzi,
    ho realizzato un handler in un file ashx ch gira sull' IIS della mia macchina. Questo Handler viene richiamato da una stampante via http ciò significa che in un oggetto HTTPCONTEXT io ho la richiesta HTTP effettuata dalla stampante con tutti i dati che mi servono.
    Mi sono salvato in un file di testo tutto il contenuto della richiesta http e tutto ciò che mi serve è presente:

    Ecco qui:

    codice:
    POST /xerox/xerox.ashx HTTP/1.1
    Cache-Control: no-cache
    Connection: Keep-Alive
    Content-Length: 253
    Content-Type: multipart/form-data;boundary=----------ThIs_Is_tHe_bouNdaRY_---$---
    Accept: image/gif, image/x-xbitmap, image/jpeg, */*
    Authorization: Basic YTI1NjA1MTphcHBvcGlwcG8=
    Expect: 100-continue
    Host: 10.155.193.175
    
    ------------ThIs_Is_tHe_bouNdaRY_---$---
    Content-Disposition: form-data; name="destDir"
    
    \Concur\
    ------------ThIs_Is_tHe_bouNdaRY_---$---
    Content-Disposition: form-data; name="theOperation"
    
    ListDir
    ------------ThIs_Is_tHe_bouNdaRY_---$-----
    Ora, come potete ben notare in questo form sono presenti due dati:

    destDir = \Concur\
    theOperation = ListDir

    con il metodo

    codice:
    context.Request.Form["destDir"]
    riesco tranquillamente a prelevare il valore relativo al campo "destDir" che è "\Concur\"
    codice:
    ------------ThIs_Is_tHe_bouNdaRY_---$---
    Content-Disposition: form-data; name="destDir"
    
    \Concur\
    ma se cerco di recuperare anche il valore del campo "theOperation" mi restituisce stringa vuota.
    codice:
    ------------ThIs_Is_tHe_bouNdaRY_---$---
    Content-Disposition: form-data; name="theOperation"
    
    ListDir
    ------------ThIs_Is_tHe_bouNdaRY_---$-----
    Ho provato ad effettuare altre prove su altre richieste http e ho notato che il request.form riconosce solo i dati della prima sezione mentre tutti gli altri no.

    Mi sapreste dire come posso recuperare anche gli altri dati???

    vi sarei grato se mi rispondeste il prima possibile la cosa è urgentissima!

    Grazie a tutti.

  2. #2
    Utente di HTML.it L'avatar di albgen
    Registrato dal
    Jun 2005
    Messaggi
    3,249
    sinceramente non capisco cosa ti server.
    intanto posta il codice del handler....
    I got the remedy

  3. #3
    Utente di HTML.it
    Registrato dal
    Jan 2007
    Messaggi
    48
    Allora prendiamo come esempio questa parte di codice che è quella iniziale:

    codice:
    try
    {
    
    // Qui mi serve il dato che mi arriva dal form e lo assegno alla variabile strOperation per lo switch.
    
    string strOperation = arg_context.Request.Form["theOperation"];
    #if OUTPUT
    arg_context.Response.Write("The operation = " + strOperation + "
    ");
    #endif
    				
                    switch (strOperation)
                    {
                        case "DeleteFile":
                            RequestProcessor.DeleteFile(arg_context);
                            break;
                        case "MakeDir":
                            RequestProcessor.MakeDirectory(arg_context);
                            break;
                        case "RemoveDir":
                            RequestProcessor.RemoveDirectory(arg_context);
                            break;
                        case "DeleteDirContents":
                            RequestProcessor.DeleteDirectoryContents(arg_context);
                            break;
                        case "GetFile":
                            RequestProcessor.GetFile(arg_context);
                            break;
                        case "PutFile":
                            RequestProcessor.SaveFiles(arg_context);
                            break;
                        case "ListDir":
                            RequestProcessor.ListDirectory(arg_context);
                            break;
                        default:
                            arg_context.Response.Write(att_constError);
                            break;
                    }
    			}
    			catch
    			{
    								arg_context.Response.Write(att_constError);
    			}
    		}
    Il form che mi viene inviato ha due campi con i rispettivi nomi:
    "theOperation" e "destDir". Il valore del campo "destDir" che è "\Concur\
    " lo recupero tranquillamente (in un'altra parte del codice non postata) con:
    arg_context.Request.Form["destDir"]

    mentre se cerco di recuperare il valore del campo "theOperation" che è "ListDir
    " con:
    arg_context.Request.Form["theOperation"]

    mi ritorna una stringa vuota anche se quel valore esiste e di conseguenza lo switch va in default.

    Riposto il log del post HTTP:

    codice:
    ------------ThIs_Is_tHe_bouNdaRY_---$---
    Content-Disposition: form-data; name="destDir"
    
    \Concur\
    ------------ThIs_Is_tHe_bouNdaRY_---$---
    Content-Disposition: form-data; name="theOperation"
    
    ListDir
    ------------ThIs_Is_tHe_bouNdaRY_---$-----
    come vedi i campi con i relativi valori ci sono tutti!

  4. #4
    Utente di HTML.it L'avatar di albgen
    Registrato dal
    Jun 2005
    Messaggi
    3,249
    scusa ma hai provato a debuggare un pò?
    a me sembra un problema molto banale nel senso che probabilmente ti dimentichi di valorizzare la variabile "theOperation".
    Metti dei breakpoint nelle parti dove fai
    nome_istanza_contesto.Request.Form["theOperation"] = "TIPO_OPERAZIONE";
    e dopo fai un quick_watch della variabile nome_istanza_contesto.Request.Form["theOperation"]
    I got the remedy

  5. #5
    Utente di HTML.it
    Registrato dal
    Jan 2007
    Messaggi
    48
    Originariamente inviato da albgen
    scusa ma hai provato a debuggare un pò?
    a me sembra un problema molto banale nel senso che probabilmente ti dimentichi di valorizzare la variabile "theOperation".
    Metti dei breakpoint nelle parti dove fai
    nome_istanza_contesto.Request.Form["theOperation"] = "TIPO_OPERAZIONE";
    e dopo fai un quick_watch della variabile nome_istanza_contesto.Request.Form["theOperation"]


    Forse non mi sono spiegato, lo script non si può debuggare perchè viene richiamato da una stampante ed è il suo POST HTTP che valorizza le variabili dell'HANDLER!!!!
    Mi spiego meglio, hai presente un generico form a video con tutti i dati nelle textbox? hai presente il tasto INVIA? Nel momento in cui premi su quel tasto viene inviata una richiesta HTTP POST al server. Bhe tutto questo nel mio caso lo fa la stampante ed io devo recuperare tutti valori che mi manda. L'handler che ho realizzato fa proprio questo!
    Con Request.Form["theOperation"] ad esempio, il mio handler si va a prendere il valore del campo "theOperation" inviatomi dalla stampante.
    Non devi ragionare lato client ma lato server:
    client = stampante che invia il form
    server = il mio handler che riceve i dati

    quindi questa cosa che hai scritto è errata
    contesto.Request.Form["theOperation"] = "TIPO_OPERAZIONE"

    è l'esatto opposto quindi:

    variabile_tipo_operazione = contesto.Request.Form["theOperation"]

  6. #6
    Utente di HTML.it L'avatar di albgen
    Registrato dal
    Jun 2005
    Messaggi
    3,249
    ho sbagliato l'esempio, ma il fulcro del problema è quello e cioè che da qualche parte quel valore deve essere valorizzato. Nel tuo caso è la stampante che si occupa di fare ciò. Ma a questo punto mi viene da dire che è la stampante che non valorizza bene.
    Io non vedo problemi nel codice che hai postato.
    I got the remedy

  7. #7
    Utente di HTML.it
    Registrato dal
    Jan 2007
    Messaggi
    48
    Originariamente inviato da albgen
    ho sbagliato l'esempio, ma il fulcro del problema è quello e cioè che da qualche parte quel valore deve essere valorizzato. Nel tuo caso è la stampante che si occupa di fare ciò. Ma a questo punto mi viene da dire che è la stampante che non valorizza bene.
    Io non vedo problemi nel codice che hai postato.
    E' proprio questo il punto, in un file di testo mi sono salvato
    (con l'istruzione [request.saveas("c:\log.txt")] ) tutto il contenuto della richiesta HTTP che mi arriva dalla stampante per assicurarmi che tutti i dati che mi servono siano presenti e effettivamente ci sono tutti, guarda, questo è il log della richiesta, l'avevo postato già prima:

    codice:
    POST /xerox/xerox.ashx HTTP/1.1
    Cache-Control: no-cache
    Connection: Keep-Alive
    Content-Length: 253
    Content-Type: multipart/form-data;boundary=----------ThIs_Is_tHe_bouNdaRY_---$---
    Accept: image/gif, image/x-xbitmap, image/jpeg, */*
    Authorization: Basic YTI1NjA1MTphcHBvcGlwcG8=
    Expect: 100-continue
    Host: 10.155.193.175
    
    ------------ThIs_Is_tHe_bouNdaRY_---$---
    Content-Disposition: form-data; name="destDir"
    
    \Concur\
    ------------ThIs_Is_tHe_bouNdaRY_---$---
    Content-Disposition: form-data; name="theOperation"
    
    ListDir
    ------------ThIs_Is_tHe_bouNdaRY_---$-----
    Vedi? "theOperation" è valorizzato, il suo valore è "ListDir"!

  8. #8
    Utente di HTML.it L'avatar di albgen
    Registrato dal
    Jun 2005
    Messaggi
    3,249
    allora posta tutto il codice cosi' si può indagare meglio.
    in quel codice che hai già postato non c'è niente di anomalo.
    I got the remedy

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.