none
Chamando um site remoto de uma view em MVC RRS feed

  • 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();
            }
        }

    sexta-feira, 9 de outubro de 2015 15:36

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>


    sexta-feira, 9 de outubro de 2015 22:04

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
    

    sexta-feira, 9 de outubro de 2015 19:29
  • 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>


    sexta-feira, 9 de outubro de 2015 22:04