Pergunta

Parece que deve ser fácil, mas por algum motivo que não estou tendo sorte. Estou migrando um aplicativo Webforms existente para o MVC, então preciso manter a raiz do site apontando para minhas páginas ASPX existentes por enquanto e aplicar apenas o roteamento em rotas nomeadas. Aqui está o que eu tenho:

    public static void RegisterRoutes(RouteCollection routes)
    {
        routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
        routes.IgnoreRoute("{resource}.aspx/{*pathInfo}");

        RouteTable.Routes.Add(
            "Root",
            new Route("", new DefaultRouteHandler())
        );

        routes.MapRoute(
            "Default",                                              // Route name
            "{controller}/{action}/{id}",                           // URL with parameters
            new { controller = "Calendar2", action = "Index", id = "" }  // Parameter defaults
        );
    }

Portanto, as páginas ASPX devem ser ignoradas e o URL da raiz padrão deve ser manuseado por este manipulador:

public class DefaultRouteHandler : IRouteHandler
{
    public IHttpHandler GetHttpHandler(RequestContext requestContext)
    {
        return System.Web.Compilation.BuildManager.CreateInstanceFromVirtualPath(
                "~/Dashboard/default.aspx", typeof(Page)) as IHttpHandler;
    }
}

Isso parece funcionar bem, mas o YPOD resultante me dá o seguinte:

Foram encontrados vários controles com o mesmo id '__page'. O Trace requer que os controles tenham IDs exclusivos.

O que parece sugerir que a página está sendo renderizada duas vezes. Se eu simplesmente digitar o URL para a página do meu painel diretamente, ele funciona bem (sem roteamento, sem erro). Não tenho ideia de por que o código do manipulador estaria fazendo algo diferente.

Resumindo - eu gostaria de simplesmente redirecionar o caminho da URL da raiz para um ASPX da minha escolha - alguém pode lançar alguma luz?

Foi útil?

Solução 2

Hmmmm. Então, meu navegador caiu por algum motivo não relacionado e agora que o reiniciei, o código acima parece estar funcionando perfeitamente como esperado. Estou completamente confuso sobre como o código do lado do servidor agora estaria agindo de maneira diferente por causa de uma reinicialização do navegador (aparentemente de alguma forma algo foi armazenado em cache incorretamente), mas parece que isso agora não é um problema.

EDITAR: Bem, isso ainda é um problema - não sei por que funcionou antes, mas é um pouco aleatório. O ponto principal parece ser que o MVC não parece jogar bem com o pastor de rastreamento. Axd em algumas circunstâncias que, de outra forma, produzem marcação perfeitamente válida. Eu realmente não tenho uma boa explicação, mas desativar o rastreamento no web.config ignora o erro. Para meus propósitos, por enquanto, isso é bom o suficiente, mas eu adoraria ouvir uma explicação melhor de outra pessoa ...

Outras dicas

Eu realmente não entendo seu problema, pode ser que não sou habilidoso o suficiente. De qualquer forma, vou tentar ...;)

Se você deseja redirecionar a partir do caminho raiz, por que não usar o documento padrão do IIS, coloque -o para index.aspx, por exemplo, e adicione esta página uma resposta.Redirect à página para a qual deseja redirecionar?

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top