Pergunta

Sou novo no MVC (e no roteamento ASP.Net).Estou tentando mapear *.aspx para um controlador chamado PageController.

routes.MapRoute(
   "Page",
   "{name}.aspx",
   new { controller = "Page", action = "Index", id = "" }
);

O código acima não mapearia *.aspx para PageController?Quando executo isso e digito qualquer página .aspx, recebo o seguinte erro:

O controlador para o caminho '/Page.aspx' não foi encontrado ou não implementa a interface IController.Nome do parâmetro:tipo de controlador

Há algo que não estou fazendo aqui?

Foi útil?

Solução

Eu apenas respondi minha própria pergunta. eu tinha as rotas para trás (padrão era acima página).

Sim, você tem que colocar todas as rotas personalizadas acima da rota padrão.

Então, isso traz a próxima pergunta ... como é que o jogo rota "Default" (I assumem que usar expressões regulares aqui) a rota "Página"?

O padrão de rota partidas com base no que chamamos de convenção sobre configuração. Scott Guthrie explica-lo bem em seu primeiro post sobre ASP.NET MVC. Eu recomendo que você lê-lo e também seus outros lugares. Tenha em mente que estas foram publicadas com base no primeiro CTP eo quadro mudou. Você também pode encontrar web elenco em ASP.NET MVC no site asp.net por Scott Hanselman.

Outras dicas

Eu apenas respondi minha própria pergunta. Eu tinha as costas rotas (Padrão estava acima da página). Abaixo é a ordem correta. Então, isso traz a próxima pergunta ... como é que o jogo rota "Default" (presumo que eles usam expressões regulares aqui) a rota "Página"?

routes.MapRoute(
            "Page",
            "{Name}.aspx",
            new { controller = "Page", action = "Display", id = "" }
        );

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

Em uma de Rob Conery MVC Storefront screencasts , ele encontra este problema exato. É em torno da marca de 23 minutos, se você estiver interessado.

Não sabe como a sua aparência controlador, o erro parece estar apontando para o fato de que ele não pode encontrar o controlador. Você herdou fora de controlador depois de criar a classe PageController? É o PageController localizado no diretório controladores?

Aqui está o meu percurso na Global.asax.cs

routes.MapRoute(
    "Page", 
    "{Page}.aspx", 
    new { controller = "Page", action = "Index", id = "" }
);

Aqui está o meu controlador, que está localizado em Controladores pasta:

using System.Web.Mvc;

namespace MvcApplication1.Controllers
{
    public class PageController : Controller
    {
        public void Index()
        {
            Response.Write("Page.aspx content.");
        }
    }
}
public class AspxRouteConstraint : IRouteConstraint
{
    #region IRouteConstraint Members

    public bool Match(HttpContextBase httpContext, Route route, string parameterName, RouteValueDictionary values, RouteDirection routeDirection)
    {
        return values["aspx"].ToString().EndsWith(".aspx");
    }

    #endregion
}

registrar a rota para todos aspx

  routes.MapRoute("all", 
                "{*aspx}",//catch all url 
                new { Controller = "Page", Action = "index" }, 
                new AspxRouteConstraint() //return true when the url is end with ".aspx"
               );

E você pode testar as rotas por MvcRouteVisualizer

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