none
Ignorando extensão de arquivo na URL em projeto MVC RRS feed

  • Pergunta

  • Olá pessoal,

    Sou "novo" no mundo .NET, comecei a atuar na área a pouco tempo, exatamente a 1 semana.

    Recebi uma missão e não estou conseguindo identificar uma forma de fazer, ou sequer se é possível fazer ou não.

    Seguinte, necessito criar uma url no seguinte formato:

    http://dominio.com/{CodCliente}.jpeg

    Onde o {CodCliente} será variável e não será imagem.

    Hué como assim Thiago não vai ser imagem?

    Essa url deverá chamar um controller que deverá resgatar o CodCliente e retornar uma imagem.

    Mas porque o .jpeg então...

    Essa url compõe faz parte de um e-mail que é enviado a varias pessoas, ou seja, o envio é em massa. Atualmente temos um link .aspx que realiza a função de resgatar esse {CodCliente} e retornar a imagem, porém isso está sendo mal visto nos servidores de recebimento, fazendo com que nossa taxa de entrega esteja diminuindo bruscamente.

    Esse link serve para identificarmos se houve a visualização do e-mail ou não.

    Eu já tentei criar uma nova rota, se utilizo o link sem a extensão .jpeg, ele funciona, mas acrescentando a extensão não rola.

    Agradeço desde já a ajuda de todos.

    Abraços.

    terça-feira, 29 de julho de 2014 14:00

Todas as Respostas

  • Galera esqueci de esclarecer que isso não é uma Spam. Trabalho em uma empresa de aplicação de entrevistas e por isso o envio em massa. Temos clientes grande como empresas aéreas e editoras.

    Por favor, deem uma luz. Pode ser uma outra sugestão.

    terça-feira, 29 de julho de 2014 20:51
  • Vai depender muito como está no seu site, o arquivo.jpeg está no HD ou no banco de dados.

    Se estiver no HD, usa URL.Content(string.Format("~/{0}.jpeg",varNomeCliente));


    terça-feira, 29 de julho de 2014 21:45
  • Obrigado César.

    Mas não tem imagem. Tenho que chamar o link contendo .jpeg para "enganar" os servidores de recebimento.

    Eles devem enxergar o link como sendo uma imagem, mas na verdade ele é um controller onde irei resgatar o codCliente para identificar se ele visualizou o e-mail ou nao.

    quarta-feira, 30 de julho de 2014 12:52
  • Para ajudar a galera a entender.

    Eu tenho a url:

    http://www.teste.com.br/Resgatar/123.jpeg

    O valor 123 é o codigo do meu cliente.

    O valor extensão jpeg é só para que o servidor de e-mail do destinatario pense que a url é uma imagem

    No meu Controller Resgatar, eu resgato o codigo 123, atualizo o meu banco informando que o cliente com Cod 123 teve mais um e-mail visualizado.

    Isso é basicamente o que necessito fazer.

    Eu tentei criar uma rota que ignorasse o .jpeg dessa forma:

    routes.Ignore("{*alljpeg}", new { alljpeg = @".*\.jpeg(/.*)?" });

    Mas não funciona, eu tomo erro 404 pq ele ainda está procurando uma imagem.

    Estou a quase uma semana quebrando a cabeça com isso. Se alguém puder me ajudar realmente ficaria muito grato.

    quarta-feira, 30 de julho de 2014 13:33
  • Cara, tenta esses exemplos abaixo, talvez te ajude

    http://pawelrychlicki.pl/Home/Details/43/mvc-return-image-dynamically-drawn-in-controller-mvc-3

    http://blogs.msdn.com/b/miah/archive/2008/11/13/extending-mvc-returning-an-image-from-a-controller-action.aspx

    quarta-feira, 30 de julho de 2014 14:58
  • Crie um handler que retorne uma imagem de um pixel e faça o um "RouteHandler" para fazer a chamada ao mesmo e processar o que você precisa:

        //Essa classe é auxiliar para criar a rota no RouteConfig.css
        public class ImageHandlerRouteHandler : IRouteHandler
        {
            public IHttpHandler GetHttpHandler(RequestContext requestContext)
            {
    	    //A CLASSE ImageHandler irá fazer o processamento principal
    	    //Retorne uma imagem png transparente de um pixel por exemplo
                var handler = new ImageHandler();
                handler.ProcessRequest(requestContext);
    
                return handler;
            }
        }

    No seu route config insira a rota para o Handler processar o request:

    RouteTable.Routes.Add(

    "MeuPixel" new Route( "images/{CodigoCliente}.png", new ImageHandlerRouteHandler() ) );

    Você vê entre chaves o {CodigoCliente}, você pode pegar essa variável na classe"ImageHandler":

    public class ImageHandler : IHttpHandler
    {
        public void ProcessRequest(RequestContext context)
        {
    		//PROCESSAMENTO DA REQUISIÇÃO
    		string codigoCliente = context.RouteData.Values["CodigoCliente"].ToString();
    	}
    	
        public void ProcessRequest(HttpContext context) { }
    
        public bool IsReusable
        {
            get
            {
                return false;
            }
        }		
    }


    Para chamar a imagem faça:

    <img src="Url.RouteUrl("MeuPixel", new { CodigoCliente = Model.CodigoCliente })" />

    Tenta aí e vê se funciona. 




    terça-feira, 5 de agosto de 2014 16:18
    Moderador