with ASP.Net MVC-Routenzuordnung




mvc routing example (4)

Ich bin neu bei MVC (und ASP.Net Routing). Ich versuche, * .aspx einem Controller namens PageController .

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

Würde der obige Code nicht * .aspx zu PageController ? Wenn ich dieses ausführe und irgendeine ASPX-Seite eintippe, erhalte ich die folgende Störung:

Der Controller für den Pfad '/Page.aspx' wurde nicht gefunden oder implementiert die IController-Schnittstelle nicht. Parametername: controllerType

Gibt es etwas, das ich hier nicht mache?


Nicht sicher, wie Ihr Controller aussieht, scheint der Fehler darauf hinzuweisen, dass er den Controller nicht finden kann. Haben Sie den Controller nach dem Erstellen der PageController-Klasse geerbt? Befindet sich der PageController im Controller-Verzeichnis?

Hier ist meine Route in der Global.asax.cs

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

Hier ist mein Controller, der sich im Controller-Ordner befindet:

using System.Web.Mvc;

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

Auf einem von Rob Conery's MVC Storefront Screencasts trifft er genau dieses Problem. Es ist bei 23 Minuten, wenn Sie interessiert sind.


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
}

Registrieren Sie die Route für alle Aspx

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

Und Sie können die Routen mit MvcRouteVisualizer testen


Ich habe nur meine eigene Frage beantwortet. Ich hatte die Routen rückwärts (Standard war über Seite). Unten ist die richtige Reihenfolge. Das bringt also die nächste Frage auf ... wie passt die "Default" -Route (ich nehme an, sie verwenden hier reguläre Ausdrücke) die "Page" -Route?

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
        );






routing