169 messaggi dal 13 ottobre 2004
www.astrofoto.it
ciao a tutti.
nella mia applicazione asp.net ho impostato
<httpRuntime maxRequestLength="5120" executionTimeout="600"/>

per impedire che gli utenti carichino file più grandi di 5MB.

se cerco di caricare un file di 8 MB l'applicazione mi va in errore (schermata gialla ) dicendomi Superato il limite della richiesta.
coome faccio ad intercettare via codice questa eccezione e far apparire all'utente un messaggi più carino?

grazie a tutti!
32 messaggi dal 29 marzo 2011
Le strade sono 2
1 ) su global.asax esiste un metodo che si chiama Application_Error, dove puoi tracciare tutti gli errori scatenati all'interno della tua applicazione, quindi all'interno di quel metodo puoi fare una verifica se l'errore è di tipo MaxRequestExceededEexception.

es:
private void Application_Error(object sender, EventArgs e)
{
 if (GlobalHelper.IsMaxRequestExceededEexception(this.Server.GetLastError()))
 {
  this.Server.ClearError();
  this.Server.Transfer("~/pageError.aspx");//redirect to pageError
 }
}


2) verificare il file uplodato non sia superiore alla dimensione che hai definito, nel tuo caso 8MB. Guarda il seguente link
[url]http://www.codeproject.com/KB/aspnet/fileupload.aspx[url]

Ciaz
Naty
169 messaggi dal 13 ottobre 2004
www.astrofoto.it
Grazie per la risposta!
la prima soluzione mi piace molto ma VS non mi riconosce il GlobalHelper; devo importare uno spazio dei nomi in particolare?
32 messaggi dal 29 marzo 2011
scusa hai ragione, non esiste una classe GlobalHelper,
mi sono dimenticato di incollarti un pezzo di codice...

Public Class GlobalHelper
{
const int TimedOutExceptionCode = -2147467259;
public static bool IsMaxRequestExceededEexception(Exception e)
{
 
 Exception main;
 var unhandeled = e as HttpUnhandledException;

 if (unhandeled != null && unhandeled.ErrorCode == TimedOutExceptionCode)
 {
  main = unhandeled.InnerException;
 }
 else
 {
  main = e;
 }


 var http = main as HttpException;

 if (http != null && http.ErrorCode == TimedOutExceptionCode)
 {
  if (http.StackTrace.Contains("GetEntireRawContent"))
  {
   return true;
  }
 }


 return false;
}
}


fammi sapere se funziona
272 messaggi dal 17 settembre 2006
Nel post non specifichi come carichi il file,
ma se lo carichi con il controllo FileUpload

potresti intercettare la dimensione nel codice

tipo

if (FileUpload1.PostedFile.ContentLength > 2000000)
                {
                    lblMessage.Text = "Il file non è stato Caricato perchè supera i 2 MB";
                }
                else
                {
                                        filePath += fileName;

                    // salviamo il file nel percorso calcolato
                    FileUpload1.SaveAs(filePath);

                    lblMessage.Text = fileName + " Caricato";
                }


per esempio
169 messaggi dal 13 ottobre 2004
www.astrofoto.it
ciao ragazzi e grazie per la risposta.
nel frattempo ho smanettato un po e questo codice sembra funzionare...

If DirectCast(Me.Server.GetLastError(), System.Web.HttpUnhandledException).ErrorCode = -2147467259 Then
            Me.Server.ClearError()
            Me.Response.Redirect("adminError.aspx?id=maxRequestLength")
        End If


ovviamente il numero -2147467259 si riferisce solo all'errore del maxRequestLength ma è proprio ciò che mi serve.
E sembra funzionare... :)
32 messaggi dal 29 marzo 2011
mbastoni ha scritto:
ciao ragazzi e grazie per la risposta.
nel frattempo ho smanettato un po e questo codice sembra funzionare...

If DirectCast(Me.Server.GetLastError(), System.Web.HttpUnhandledException).ErrorCode = -2147467259 Then
            Me.Server.ClearError()
            Me.Response.Redirect("adminError.aspx?id=maxRequestLength")
        End If


ovviamente il numero -2147467259 si riferisce solo all'errore del maxRequestLength ma è proprio ciò che mi serve.
E sembra funzionare... :)


Attenzione il numero -2147467259 è il codice d' Errore del TimeoutTimedOutExceptionCode;Quindi si riferisce all'eccezione del timeOut generico, non del maxRequestLength
169 messaggi dal 13 ottobre 2004
www.astrofoto.it
accidenti... e il numero del maxRequestLength qual'è? :/

Torna al forum | Feed RSS

ASPItalia.com non è responsabile per il contenuto dei messaggi presenti su questo servizio, non avendo nessun controllo sui messaggi postati nei propri forum, che rappresentano l'espressione del pensiero degli autori.