Как сделать множественную маршрутизацию на одном контроллере - PullRequest
0 голосов
/ 11 августа 2011

Что я хочу сделать, это как страница профиля Facebook (facebook.com/username), я хотел бы сделать то же самое www.myapplication / username, есть ли способ маршрутизации ??

1 Ответ

0 голосов
/ 12 августа 2011

Чтобы направить на страницу профиля, вам нужен маршрут с RouteConstraint, чтобы проверить правильность имени пользователя. Ваш маршрут должен быть первым, а RegisterRoutes в Global.asax.cs должен выглядеть следующим образом:

public static void RegisterRoutes(RouteCollection routes)
{
    routes.IgnoreRoute("{resource}.axd/{*pathInfo}");

    routes.MapRoute(
        "Profiles", // Route name
        "{username}", // URL
        new { controller = "Profile", action = "Index" }, // Parameters
        new { username = new MustBeUsername() }

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

}

Затем вы должны создать класс RouteConstraint, который проверит вашу базу данных, чтобы убедиться, что введенное имя пользователя действительно:

using System; 
using System.Web; 
using System.Web.Routing;  

namespace ExampleApp.Extensions 
{ 
    public class MustBeUsername : IRouteConstraint  
    { 
        public MustBeUsername() { }

        private DbContext _db = new DbContext();

        public bool Match(HttpContextBase httpContext, Route route, string parameterName, RouteValueDictionary values, RouteDirection routeDirection)    
        {      
            return (_db.Users.Where(u => u.Username == values[parameterName].ToString()).Count() > 0);
        }  
    } 
}

counsellorben

...