ASP.Net Maparea rutelor MVC

Sunt nou la MVC (și rutare ASP.Net). Încerc să harta * .aspx la un controler numit PageController .

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

Codul de mai sus * .aspx nu va fi codul PageController ? Când rulați acest lucru și tastați în orice pagină .aspx, primesc următoarea eroare:

Controlerul pentru calea "/Page.aspx" nu a putut fi găsit sau nu implementează interfața IController.   Nume parametru: controllerType

E ceva ce nu fac aici?

0
fr hi bn

5 răspunsuri

Tocmai mi-am răspuns la întrebarea mea. Am avut rutele înapoi (Implicit a fost deasupra paginii). Mai jos este ordinea corectă. Deci, aceasta ridică următoarea întrebare ... cum se potrivește traseul "Implicit" (presupun că folosesc expresii regulate aici) ruta "Pagina"?

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
        );
0
adăugat

Pe unul dintre MVC Storefront de la Rob Conery, el întâlnește acest lucru problema exactă. E în jurul valorii de 23 minute dacă sunteți interesat.

0
adăugat

Nu sunteți sigur cum arată controlerul dvs., eroarea pare să indice faptul că nu poate găsi controlerul. Ați moștenit de la Controller după ce ați creat clasa PageController? Navigatorul PageController este localizat în directorul Controlere?

Aici este ruta mea în Global.asax.cs

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

Aici este controlerul meu, care se află în folderul Controlere:

using System.Web.Mvc;

namespace MvcApplication1.Controllers
{
    public class PageController : Controller
    {
        public void Index()
        {
            Response.Write("Page.aspx content.");
        }
    }
}
0
adăugat

Tocmai mi-am răspuns la întrebarea mea. am avut   traseele înapoi (Implicit a fost   de mai sus).

Da, trebuie să puneți toate rutele personalizate deasupra rutei prestabilite.

Deci, aceasta ridică următoarea întrebare ...   Cum se potrivește traseul "Implicit" (I   presupun că folosesc expresii regulate   aici) pe ruta "Pagina"?

Traseul implicit se potrivește în funcție de ceea ce numim Convenție peste Configurație. Scott Guthrie îl explică bine în prima sa postare de blog pe ASV.NET MVC. Vă recomandăm să le citiți și pe celelalte posturi ale sale. Rețineți că acestea au fost postate pe baza primului CTP, iar cadrul sa schimbat. Puteți găsi, de asemenea, distribuție web pe ASP.NET MVC pe site-ul asp.net de către Scott Hanselman.

0
adăugat
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
}

înregistrați ruta pentru toate aspx-urile

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

Și puteți testa rutele prin MvcRouteVisualizer

0
adăugat