Inquiridor
Ignorando extensão de arquivo na URL em projeto MVC

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.
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.
-
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));
- Editado Cesar Mendes da Silva terça-feira, 29 de julho de 2014 21:46 atualizacao
-
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.
-
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.
-
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
-
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.
- Editado João_ PradoModerator terça-feira, 5 de agosto de 2014 16:26