Usuário com melhor resposta
Chamando um site remoto de uma view em MVC

Pergunta
-
Prezados, necessito da ajuda de vocês para tentar resolver o seguinte problema. Não sei se é exatamente aqui neste forum, porém já busquei em muito lugar mas nada encontrei.
A situação é a seguinte: em um projeto MVC, tenho um controller ActionResult que dependendo do usuário logado deverá encaminhar para a view ou usar o return redirect para abrir o site de acordo com o perfil do usário. Este site deve ser aberto em um iframe ou abrir em uma janela nova sem os controles do navegador (como se fosse um modal).
Exemplo:
Se joão estiver logado no sistema e acionar a opção na view carregar pesquisador, o mesmo irá chamar o Controller correspondente e este deve abrir uma nova janela em full ou dentro de um iframe na mesma view (acredito que ai teria que trabalhar com partial view, não sei) o site http://www.google.com
Se Maria estiver logada deve fazer a mesma coisa porém deve abrir o site http://www.yahoo.com
Abaixo coloco um pedaço do controller que montei.
public class PesquisadorController : Controller
{
private ClienteRepositorio repositorio;
private ConfigRepositorio repconf;
// GET: Pesquisador
public ActionResult OnDemand()
{
repositorio = new ClienteRepositorio();
repconf = new ConfigRepositorio();
tbCliente usrCliente = repositorio.ObterCliente(this.User.Identity.Name);
if (usrCliente != null)
{
//obter OnDemand
tbConfiguracao usrConfiguracao = repconf.ObterConfiguracao(usrCliente.IdCliente);
ViewBag.UrlConf = usrConfiguracao.PesquisadorOnDemand;
//return Redirect(usrConfiguracao.PesquisadorOnDemand); neste caso funciona porém perco a página do meu sistema
}
return View();
}
}
Respostas
-
Prezados, o Valdir achou uma solução e eu complementei com o resto e deu certo da seguinte forma:
Na view da ação colocamos um javascript que permite carregar o site dentro de um iframe da seguinte forma:
<script src="//ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script>
<script>
$(function ()
{ $("#div1").load('devMediaIframe.html', sucessCallBack); }); function sucessCallBack(a) { } </script>
<div>
<iframe src="http://www.devmedia.com.br" height="600px" width="100%"></iframe>
</div>Porém como eu passo uma variável pela ViewBag, eu pego o conteúdo desta variável e troco pelo src da div. Assim conseguimos acessar.
O Valdir achou uma outra solução que pode ser melhor ainda que frame, bastando para isso, trabalhar com object no javascript
<div>
<object type="text/html" data="http://www.devmedia.com.br" width="1150" height="800" style="overflow:auto;"></object>
</div>- Marcado como Resposta Ricardo Facincani sexta-feira, 9 de outubro de 2015 22:05
- Editado Ricardo Facincani terça-feira, 13 de outubro de 2015 21:49
Todas as Respostas
-
Valdir, muito obrigado por responder. Pessoas com você ajudam a desenvolver outras pessoas! Porém não resolveu. Quando retornou para a view, apresentou a tela de erro anexa.
Não sei se o problema está na View, abaixo coloco o seu conteúdo.
Obs.: Apesar de eu ter coloco frame, ele não irá executar (acredito nisso, pois com o comando redirect não faz sentido usar a View).
O meu controller está assim:
====== Controller ======
public ActionResult OnDemand()
{
repositorio = new ClienteRepositorio();
repconf = new ConfigRepositorio();
tbCliente usrCliente = repositorio.ObterCliente(this.User.Identity.Name);
if (usrCliente != null)
{
//obter OnDemand
tbConfiguracao usrConfiguracao = repconf.ObterConfiguracao(usrCliente.IdCliente);
ViewBag.UrlConf = usrConfiguracao.CezanneOnDemand;
return RedirectToAction(usrConfiguracao.CezanneOnDemand, new { taget = "_blank" });
//return Redirect(usrConfiguracao.CezanneOnDemand);
}
return View();
}====== View ===========
@{
ViewBag.Title = "CezanneOnDemand";
var chamarUrl = ViewBag.UrlConf;
}
<section id="pagina">
<link rel="Index" href=@chamarUrl/>
<iframe name="idframe" scrolling="auto" width="1200" height="400">
</iframe>
</section>
==================== Erro ========================
Link que ele cria: //localhost:31648/Cezanne/https%3a/showcase.cezanneondemand.com/CezanneOnDemand/-/EQG2/?taget=_blank
Um valor possivelmente perigoso Request.Path foi detectado no cliente (:).
Descrição: Ocorreu uma exceção sem tratamento durante a execução da atual solicitação da Web. Examine o rastreamento de pilha para obter mais informações sobre o erro e onde foi originado no código.
Detalhes da Exceção: System.Web.HttpException: Um valor possivelmente perigoso Request.Path foi detectado no cliente (:).
Erro de Origem:Exceção sem tratamento foi gerada durante a execução da atual solicitação da Web. As informações relacionadas à origem e ao local da exceção podem ser identificadas usando-se o rastreamento de pilha de exceção abaixo.
Rastreamento de Pilha:[HttpException (0x80004005): Um valor possivelmente perigoso Request.Path foi detectado no cliente (:).] System.Web.HttpRequest.ValidateInputIfRequiredByConfig() +9784848 System.Web.PipelineStepManager.ValidateHelper(HttpContext context) +53
-
Prezados, o Valdir achou uma solução e eu complementei com o resto e deu certo da seguinte forma:
Na view da ação colocamos um javascript que permite carregar o site dentro de um iframe da seguinte forma:
<script src="//ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script>
<script>
$(function ()
{ $("#div1").load('devMediaIframe.html', sucessCallBack); }); function sucessCallBack(a) { } </script>
<div>
<iframe src="http://www.devmedia.com.br" height="600px" width="100%"></iframe>
</div>Porém como eu passo uma variável pela ViewBag, eu pego o conteúdo desta variável e troco pelo src da div. Assim conseguimos acessar.
O Valdir achou uma outra solução que pode ser melhor ainda que frame, bastando para isso, trabalhar com object no javascript
<div>
<object type="text/html" data="http://www.devmedia.com.br" width="1150" height="800" style="overflow:auto;"></object>
</div>- Marcado como Resposta Ricardo Facincani sexta-feira, 9 de outubro de 2015 22:05
- Editado Ricardo Facincani terça-feira, 13 de outubro de 2015 21:49