public void Manipular(HttpListenerResponse resposta, string path) { var assembly = Assembly.GetExecutingAssembly(); var nomeResource = Utilidades.ConverterPathParaNomeAssembly(path); var resourceStream = assembly.GetManifestResourceStream(nomeResource); if (resourceStream == null) { resposta.StatusCode = (int)HttpStatusCode.NotFound; resposta.OutputStream.Close(); } else { using (resourceStream) { var bytesResource = new byte[resourceStream.Length]; resourceStream.Read(bytesResource, 0, (int)resourceStream.Length); resposta.ContentType = Utilidades.ObterTipoDeConteudo(path); resposta.StatusCode = (int)HttpStatusCode.OK; resposta.ContentLength64 = resourceStream.Length; resposta.OutputStream.Write(bytesResource, 0, bytesResource.Length); resposta.OutputStream.Close(); } } }
public void Manipular(HttpListenerResponse resposta, string path) { // retornar o ducmento css var assembly = Assembly.GetExecutingAssembly(); var nomeResource = Utilidades.ConvertPathParaNomeAssembly(path); var resourceStream = assembly.GetManifestResourceStream(nomeResource); // caso nada tenha sido carregado, entao devolvemos erro (404) // erro nesse tipo de programa. if (resourceStream == null) { resposta.StatusCode = 404; resposta.OutputStream.Close(); } else { using (resourceStream) { // nesse tipo de protocolo nao conseguimos trafegar dados string // somente streaming (array de bytes) entao vamos converter var bytesResouce = new byte[resourceStream.Length]; resourceStream.Read(bytesResouce, 0, (int)resourceStream.Length); // configurando o response resposta.ContentType = Utilidades.ObterTipoDeConteudo(path); resposta.StatusCode = 200; resposta.ContentLength64 = resourceStream.Length; resposta.OutputStream.Write(bytesResouce, 0, bytesResouce.Length); resposta.OutputStream.Close(); } } }
public void Manipular(HttpListenerResponse resposta, string path) { #region Pegando arquivo de resposta // Para que o arquivo seja pego, o mesmo (style.css) deve estar como Embedded Resource em Build Action nas propriedades var assembly = Assembly.GetExecutingAssembly(); var nomeResource = Utilidades.ConverterPathParaNomeAssembly(path); // Acessando arquivo pelo assembly var resourceStream = assembly.GetManifestResourceStream(nomeResource); #endregion #region Retornando arquivo de resposta // Se o arquivo não foi encontrado, retornar 404 if (resourceStream == null) { resposta.StatusCode = 404; resposta.OutputStream.Close(); } else { using (resourceStream) { // Salvando arquivos em um Array de bytes (byteResource) var byteResource = new byte[resourceStream.Length]; resourceStream.Read(byteResource, 0, (int)resourceStream.Length); // Definindo o tipo da resposta (css, html ou js) resposta.ContentType = Utilidades.ObterTipoDeConteudo(path); // Definindo o status da requisição resposta.StatusCode = 200; // Tamanho da resposta resposta.ContentLength64 = resourceStream.Length; // Retornando resposta (Array de bytes, indice inicio da leitura, e indice final da leitura) resposta.OutputStream.Write(byteResource, 0, byteResource.Length); // Fechando requisição resposta.OutputStream.Close(); } } #endregion }
public void Manipular(HttpListenerResponse resposta, string path) { //retornar o nosso documento style.css var assembly = Assembly.GetExecutingAssembly(); //retornar o assembly que fez a chamada (ele mesmo) o assembly a ser retornar é o byteBank //vamos acessar o recurso do css. vc nao tem acesso ao texto puro. voce tem acesso ao stream. var nomeResource = Utilidades.ConvertPathNomeAssembly(path); var resourceStream = assembly.GetManifestResourceStream(nomeResource); if (resourceStream == null) { resposta.StatusCode = 404; resposta.OutputStream.Close(); } else { //A metodo GetManifestResourceStream deveolve um stream, que implementa a interface IDisposible. //é uma boa practia usar classes que implementam o IDisposble com o Using porque logo apos seu uso //o espaçao e liberado em memoria. Quando agente nao faz isso o .net mantem a referencia em memoria. using (resourceStream) { var respostaConteudoBytes = new Byte[resourceStream.Length]; //vamos pegar os fluxo de dados da nossa mangueira para nosso baldinho(bytesResourse) resourceStream.Read(respostaConteudoBytes, 0, (int)resourceStream.Length); resposta.ContentType = Utilidades.ObterTipoDeConteudo(path); //precisamos definir o status do codigo da requisição resposta.StatusCode = 200; //Sucesso //Informo ao IE, Chrome o tamnho de resposta que ele pode esperar resposta.ContentLength64 = respostaConteudoBytes.Length; //Vamos escrever nossa resposta http; resposta.OutputStream.Write(respostaConteudoBytes, 0, respostaConteudoBytes.Length); //precisamos fechar o fluxo resposta.OutputStream.Close(); } } }