asp.net - with - mvc routing example




ASP.Net MVC-Routenzuordnung (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?


Ich habe nur meine eigene Frage beantwortet. Ich hatte die Routen rückwärts (Standard war über Seite).

Ja, Sie müssen alle benutzerdefinierten Routen über die Standardroute setzen.

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?

Die Standardroute stimmt mit dem überein, was wir als Konvention über Konfiguration bezeichnen. Scott Guthrie erklärt es in seinem ersten Blogbeitrag auf ASP.NET MVC. Ich empfehle Ihnen, es durchzulesen und auch seine anderen Beiträge. Beachten Sie, dass diese basierend auf dem ersten CTP gebucht wurden und sich das Framework geändert hat. Sie können auch Webcast auf ASP.NET MVC auf der asp.net-Site von Scott Hanselman finden.


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


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.");
        }
    }
}

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





routing