public void Manipular(HttpListenerResponse resposta, string path) { // split com remoção de partes vaias. var partesPath = path.Split(new char[] { '/' }, StringSplitOptions.RemoveEmptyEntries); var controllerNome = partesPath[0]; var actionNome = partesPath[1]; var nomeCompleto = $"ByteBank.Portal.Controller{controllerNome}.{actionNome}"; // criamos uma instancia da classe (Foi comentando quando implementamos injecao de dependecias) // pois nao preciramos mais unsar o get instance. //var controllerWrapper = Activator.CreateInstance("ByteBank.Portal", nomeCompleto, new object[0]); //// captura e retorna o metodo original que criamos //var controller = controllerWrapper.Unwrap(); var controller = _controllerResolver.ObterController(nomeCompleto); // buscando informações dos metodos do nosso controller // criamos o novo tipo para poder passar diretamente para os dois casos var actionBindInfo = _actionBinder.ObterActionBinderMethodInfo(controller, path); var filterResult = _filterResolver.VerficarFiltros(actionBindInfo); if (filterResult.PodeContinuar) { // executar o metodo e recuperar uma string var resultadoAction = (string)actionBindInfo.Invoke(controller); var bufferArquivo = Encoding.UTF8.GetBytes(resultadoAction); resposta.StatusCode = 200; resposta.ContentType = "text/html; charset=utf-8"; resposta.ContentLength64 = bufferArquivo.Length; resposta.OutputStream.Write(bufferArquivo, 0, bufferArquivo.Length); resposta.OutputStream.Close(); } else { resposta.StatusCode = 307; resposta.RedirectLocation = "/Erro/Inesperado"; resposta.OutputStream.Close(); } }
public void Manipular(HttpListenerResponse resposta, string path) { // Pegando o nome da controller var controllerNome = path.Split(new char[] { '/' }, StringSplitOptions.RemoveEmptyEntries)[0]; var controllerNomeCompleto = $"ByteBank.Portal.Controller.{controllerNome}Controller"; // Criando uma instancia do Controller recebido na requisição var controller = _controllerResolver.ObterController(controllerNomeCompleto); // Pegando metodo a ser executado (MethodInfo) var actionBindInfo = _actionBinder.ObterActionBindInfo(controller, path); // Verificando filtro, e identificando se o metodo podera ser executado var filterResult = _filterResolver.VerificarFiltros(actionBindInfo); if (filterResult.PodeContinuar) { // Executando metodo var resultadoAction = (string)actionBindInfo.Invoke(controller); // Retornando resultado (pagina) var bufferArquivo = Encoding.UTF8.GetBytes(resultadoAction); resposta.ContentType = "text/html; charset=utf-8"; resposta.StatusCode = 200; resposta.ContentLength64 = bufferArquivo.Length; resposta.OutputStream.Write(bufferArquivo, 0, bufferArquivo.Length); resposta.OutputStream.Close(); } else { // Retorna codigo de erro temporario resposta.StatusCode = 307; // Redirecionado para pagina de erro resposta.RedirectLocation = "/Erro/Inesperado"; resposta.OutputStream.Close(); } }
public void Manipular(HttpListenerResponse resposta, string path) { var partes = path.Split(new char[] { '/' }, StringSplitOptions.RemoveEmptyEntries); var controllerNome = partes[0]; var actionNome = partes[1]; var controllerNomeCompleto = $"ByteBank.Portal.Controller.{controllerNome}Controller"; //var controllerWrapper = Activator.CreateInstance("ByteBank.Portal", controllerNomeCompleto, new object[0]); //var controller = controllerWrapper.Unwrap(); var controller = _controllerResolver.ObterController(controllerNomeCompleto); //var methodInfo = controller.GetType().GetMethod(actionNome); var actionBindInfo = _actionBinder.ObterActionBindInfo(controller, path); var filterResult = _filterResolver.VerficarFiltros(actionBindInfo); if (filterResult.PodeContinuar) { var resultadoAction = (string)actionBindInfo.Invoke(controller); var buffer = Encoding.UTF8.GetBytes(resultadoAction); resposta.StatusCode = 200; resposta.ContentType = "text/html; charset=utf-8"; resposta.ContentLength64 = buffer.Length; resposta.OutputStream.Write(buffer, 0, buffer.Length); resposta.OutputStream.Close(); } else { resposta.StatusCode = 307; resposta.RedirectLocation = "/Erro/Inesperado"; resposta.OutputStream.Close(); } }