Domanda

All'inizio di domanda , per quanto riguarda il download di un file da un server e la gestione delle eccezioni in modo corretto. Sono certo che avevo questo risolto, allora in voga programmazione classica, tornato giorni più tardi per trovare frustrante è rotto: - (


codice aggiornato:

private static void GoGetIt(HttpContext context)
    {
        var directoryInfoOfWhereTheDirectoryFullOfFilesShouldBe = new FileInfo(......);
                var name = SomeBasicLogicToDecideName();

            //if (!directoryInfoOfWhereTheDirectoryFullOfFilesShouldBe.RefreshExists())
            //{
            //  throw new Exception(string.Format("Could not find {0}.", name));
            //}

            var tempDirectory = ""; //Omitted - creates temporary directory

            try
            {
                directoryInfoOfWhereTheDirectoryFullOfFilesShouldBe.CopyAll(tempDirectory);
                var response = context.Response;
                response.ContentType = "binary/octet-stream";
                response.AddHeader("Content-Disposition", string.Format("attachment;filename={0}.zip", name));
                ZipHelper.ZipDirectoryToStream(tempDirectory, response.OutputStream);
                response.End();
            }
            catch (Exception ex)
            {
                Debug.WriteLine(ex.ToString());
                context.Response.StatusCode = 404;
            }
            finally
            {
                tempDirectory.DeleteWithPrejudice();
            }
        }

Questa è stata lavorando bene, e restituendo la zip, altrimenti se il file non esiste ritorno 404. Poi sul lato client ho potuto gestire questo:

public bool Download()
{   
 try
                {
                    using (var client = new WebClient())
                    {
                        client.DownloadFile(name, tempFilePath);
                    }

                }
                catch (Exception)
                {
                    fileExists = false;
                }
return fileExists;
    }

Ma il problema ora è di due cose.

1) ottengo System.Threading.ThreadAbortException: Thread annullato nel blocco try-catch lato server. Di solito questo è stato solo un file non trovato eccezione. Non ho idea di che cosa o perché quella nuova eccezione sta gettando?

2) Ora che un'eccezione diversa sta gettando sul lato server invece del file non trovato, a quanto pare non posso usare questo set up per l'applicazione, perché indietro sul lato client, qualsiasi eccezione si presume essere filenotfound.

Qualsiasi aiuto, in particolare informazioni sul perché questo ThreadAbortException sta gettando!?!? molto apprezzato. Acclamazioni

È stato utile?

Soluzione

Il problema è che Response.End () getta un ThreadAbortException: ecco come va a finire la richiesta. Basta sbarazzarsi di quella chiamata del tutto, non hai bisogno di esso.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top