Frage

Ich habe eine Nachrichten-Website mit Artikeln in Kategorien markiert.

Meine Controller "Kategorie" genannt und diese URL:

  

http://mysite.com/Category/Sport

geht Sport zum Handeln Index in Controller Category.

Ich möchte die folgenden URLs ermöglichen:

  

http://mysite.com/Sport/Hockey
  http://mysite.com/Sport/Football
  http://mysite.com/Science/Evolution

Welche leitet alle Kategorie Informationen zur Aktion Index in Controller Category.

Wie erstelle ich eine Catch-all-Route, die alle diese Griffe und pendelt sie zur Kategorie?

War es hilfreich?

Lösung

Es ist eine ziemlich gute Antwort auf meine Frage an diesen Linien a href <= "https://stackoverflow.com/questions/19941/aspnet-mvc-catch-exception-when-non-existant-controller-is-requested „> hier .

Andere Tipps

Sie können es tun, wie folgt:

routes.MapRoute("Default", "{category}/{subcategory}",
    new { controller = "CategoryController", action = "Display", id = "" }
);

und dann in Ihrem Controller:

public class CategoryController : Controller
{
    public ActionResult Display(string category, string subcategory)
    {
        // do something here.
    }
}

Sie nicht, dass jeder die Strecke für alle Routen verwendet werden oben (man kann nicht eine haben Über-Seite usw., es sei denn Sie explizite Routen vor über einem angeben).

Sie können jedoch eine benutzerdefinierte Einschränkung umfassen die Route nur bestehende Kategorien zu begrenzen. So etwas wie:

public class OnlyExistingCategoriesConstraint : IRouteConstraint
{
    public bool Match
        (
            HttpContextBase httpContext,
            Route route,
            string parameterName,
            RouteValueDictionary values,
            RouteDirection routeDirection
        )
    {
        var category = route.DataTokens["category"];
        //TODO: Look it up in your database etc


        // fake that the category exists
        return true;
    }
}

, die Sie in Ihre Route wie folgt aus:

routes.MapRoute("Default", 
    "{category}/{subcategory}",
    new { controller = "CategoryController", action = "Display", id = "" },
    new { categoryExists = new OnlyExistingCategoriesConstraint() }
);

Auf diese Weise wird es nicht mit dem anderen definierten Routen stören.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top